Dp
文章平均质量分 79
islands_
IT 弱菜
展开
-
最长公共子序列的另一类优化方法
最长公共子序列(LCS)是一个很经典的问题。 给2个字符串s1,s2,求LCS(s1,s2). 用d[i][j]]表示s1[1-i]和是s2[1-j]的LCS. if(s1[i]==s2[j]) d[i][j]=d[i-1][j-1]+1 else d[i][j]=max(d[i-1][j],d[I][j-1]).这是一个1D/1D的动态规划问题,复查度为O(n*n)。 考虑如下特原创 2015-06-27 18:32:30 · 593 阅读 · 0 评论 -
hdu 2829 dp+四边形不等式优化
用w[i][j]表示i到j之间没有边毁掉的费用。有一种很好证明w[i][j]是否满足四边形不等式的条件. 若(w[i+1][j]-w[i][j])是关于j的减函数,就是满足条件的。可以证明这里的w[i][j]是瞒住条件的。#include #include #include #include #include #include #include #include #原创 2015-06-29 18:32:42 · 609 阅读 · 0 评论 -
bzoj 1010 (单调决策优化)
可以很好的证明单调决策性质。用 记sum[i]=sigma(C[1],C[2].....C[k]);f[i]=sum[i]+i; c=l-1;有转移dp[i]=min( dp[j]+(f[i]-f[jk]-c)^2); 假死 有2个决策j#include #include #include #include #include #include #include #incl原创 2015-06-27 13:35:26 · 1010 阅读 · 0 评论 -
[HNOI2008]玩具装箱toy(dp+斜率优化)
斜率优化问题一般都是决策单调问题。对于这题可以证明单调决策。令sum[i]=sigma(c [k] ) 1 首先我们可以写出转移方程 dp[i] = min( dp[j] + (f[i]-f[j]-c)^2 ) 。令决策j1 dp[j2]+(f[i]-f[j2]-c)^2可以得带 ((dp[j2]+f[j2]^2)-(dp[j1]+f[j1]^2) )/(f[j2]-f[j1原创 2015-06-29 14:17:00 · 736 阅读 · 0 评论 -
swust oj 2516 教练我想学算术 dp+组合计数
#include#include#include#include#include#include#include#include#include//#define debugusing namespace std;const int inf = 0x3fffffff;const int mod = 1000000007;const int mmax = 1000010;原创 2015-06-08 20:42:00 · 690 阅读 · 0 评论 -
上海邀请赛 A题目 HDU 5236(dp)
先求出没有ctrl+s的时候构造长度为i的期望f[i] 。然后枚举保存的次数,求出最小即可。#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;const int mmax原创 2015-06-12 15:24:00 · 936 阅读 · 0 评论 -
hdu 2191 (多重背包的单调队列优化)
多重背包单调队列优化是思想是。普通的dp为dp[i][j]=max{dp[i-1][j-k*v[i]]+k*w[i]};其实你可以发现对能更新j是j和一个剩余类。也就是 0, v[i],2v[i],3v[i] ,4v[i]...1 ,1+v[i],1+2v[i],1+3v[i]...........v[i]-1,2*v[i]-1......更新值存在一个剩余类中,组与组原创 2015-07-17 13:12:53 · 1254 阅读 · 0 评论 -
POJ 2486 Apple Tree (树形dp)
这是一个树上的背包转移。注意要用dp[i][j][k]表示第i个节点用了j的路程是否回到i节点,k=0表示回到i点,k=1表示不回到i点。那么实际上就是树上的一个背包转移。#include #include #include #include #include #include #include #include #include #include #include #i原创 2015-07-16 15:05:55 · 587 阅读 · 0 评论