摘要: 连续两天学了一些numerical analysis的方法,昨天是学了一下三分,今天学了一下模拟退火。很早就听说了模拟退火在求费马点上的运用了,只知道一些大概,但是没有深入研究,碰到题目就卡壳了,现在算是补一下这种方法的思路。模拟退火就是随机一些起点,然后定一个步长,每次在k个方向上去走这个步长,看下哪个方向最优,最优的话则留下来,然后步长*p,p就是控制的系数,然后如此重复。当然退火的含义就是有些时候我们会选择跳出当前的局部最优解,这个概率是预先设定的,在今天这题里貌似也不需要设定这样的概率,感觉有种水过去的感觉,贴一记代码#pragma warning(disable:4996)#incl 阅读全文
posted @ 2014-03-27 22:31 chanme 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 算是学了图dp后的第一次应用吧。题目其实真的是非常不严谨,什么都没说,基本靠猜,而且严格来说数据应该会有爆int的,不过不管那么多啦,思路对了就好- -0#include#include#include#include#include#include#include#define ll long long#define maxn 5000#define maxm 1000000#define inf 0x3f3f3f3fusing namespace std;vector G[maxn+50];struct Node{ int v,k; Node(){} Node(int vi,int ki) 阅读全文
posted @ 2014-03-27 18:41 chanme 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 晦涩的题意+各种傻逼害我调了那么久,实际上题目就是一个dp[i][j],dp[i][j]表示第i层第j个最少需要多少时间,当我们去更新dp[i][j]的时候,考虑的是从第i+1层的某一个dp[i+1][k]往上顶一层,然后走到dp[i][j]的位置,当然往上跳的时候要注意不要碰到怪物墙壁,各种坑,我的码力果然不行呀- -0#pragma warning(disable:4996)#include#include#include#include#include#include#include#define maxn 2500#define maxw 220using namespace std; 阅读全文
posted @ 2014-03-27 00:48 chanme 阅读(178) 评论(0) 推荐(0) 编辑