算法之DP
Posted greed-vi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法之DP相关的知识,希望对你有一定的参考价值。
一般DP
都是有模板的,先初始化,然后找到不同状态下数值的关系,使得某个状态可用另一个状态由一个固定的方式转移而来,列出状态转移方程,这就是DP;
例题
P1216 [USACO1.5]数字三角形 Number Triangles
1 f[i][j]+=max(f[i-1][j-1],f[i-1][j]);
1 f[i]+=f[j]*f[i-j-1];
1 f[i]=min(f[i-1]+t[i],min(f[i-2]+t[i-1],f[i-3]+t[i-2]));
可以看出,裸的DP是几乎没有难度的,当然某些题除外如P1004,P1280等题,值得思考。
背包问题
背包属于基础DP,但拓展性是最高的。
具体可以看dd大牛的《背包九讲》
1 f[v]=max{f[v],f[v-c[i]]+w[i]};
上面的是01背包的转移方程,但v是从V...c[i]的。
为什么呢?这个方程代表第v个体积的物体的最大值=max(他自己本身,v-第i个物体的体积时的最大值+第i个物体的值)
例题
01背包基本是套这个模板,但也不缺乏很有思考性的,如P2370,P2979,P1156,P4544(这个要单调队列优化,但纯背包有60-70分,题解在这里);
线段树单调队列优化
优先队列优化
状压DP(就是变相暴力)
树形DP(我最不擅长)
二分优化
还有一些提高组的就不列了(如斜率优化,数位,插头DP)
以上是关于算法之DP的主要内容,如果未能解决你的问题,请参考以下文章