摘要: 跟数的划分有些类似,递归+记忆化搜索,做过数的划分的人做这道题目应该不是很难。http://www.cnblogs.com/zyxx233/archive/2012/12/08/2809187.html这是数的划分题解同样的,我还是以haha来作为函数.....(个人癖好)状态:haha(s,t,k).意思是从s到t的数段中加入k 个乘号所能得到的最大值。所以 ans:=haha(1,n,k).状态的转移:for i:=1 to t-k-s+1 do begin val(copy(st,s,i),m); if ha[s+i,t,k... 阅读全文
posted @ 2012-12-08 21:22 改名字干什么 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 算法:DP。如果数据不是很大的话我们就可以直接DP了...但是数据有 10^9,所以普通的DP根本不能AC.我记得一个月以前我做了这道题目,普通地DP,然后只能过三个点。数组不能开这么大,就算能开这么大也会超时。这里有个路径压缩的优化方法。。。。(纯属装B....)首先我们先分析一下数据规模,我们发现呢,L<=10^9. 而石子的个数m<=100.这就意味着平均两个石子中间有10^7 的路是没有石子的。也就是说,两个石子中间我们进行了很多没有必要的DP。我们可以稍微把中间给缩减一下。我们通过一个运算求得一次最短可跳长度(S)到一次最长可跳长度(T)中的每一个数的最小公倍数的值为k。 阅读全文
posted @ 2012-12-08 21:05 改名字干什么 阅读(358) 评论(0) 推荐(0) 编辑
摘要: 多线程 DP。真心觉得这个方程不好想!设f[k,i,j,l], 表示走第k步,第一个人,第二个人和第二个人各走到第I行,第j行和第L行所能得到的最优解(我们规定前一个人比后一个人先走!)。状态转移:规定 t[1]:=0; t[2]:=-1;for w:=1 to 2 do for q:=1 to 2 do for p:=1 to 2 do f[k,i,j,l]:=max(f[k,i,j,l],f[k-1,i+t[w],i+t[q],l+t[p]])共有八种状态转移的方式!接下来:由于更新了 i,j,l 并规定了前一个人比后一个人先走所以:有 f[k,i,j,l]:=f[k,i,j,l... 阅读全文
posted @ 2012-12-08 20:45 改名字干什么 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 我想说,题目的意思有误啊!!!!他说任意两份不能相同,我就以为分成的每个部分都不能相同...但他的意思是这是个组合,不是排列(即不考虑顺序问题....)被坑了.....算法: 递归+记忆化搜索顺便说一下 个人比较喜欢用 haha来作为函数的名称.....ans:=haha(n,k,min). 意思是从 把n 分成 k份的方案数,至于后面的1。意思是分出来的每份的值小于min(初始值为1),这个东西在后面有用。因为我们要得出的是一个组合,不是排列,所以我们可以设每次的方案分出的数的序列都是一个不降的序列,如此就有:当k>=2 时,我们有haha(n,k,min):=haha(n,k,min 阅读全文
posted @ 2012-12-08 20:07 改名字干什么 阅读(324) 评论(0) 推荐(0) 编辑