引言
dp 所要解决的是多阶段决策问题,它利用递归的思想,将规模为n的问题转化为规模较小的问题,直到转化为小到能够直接求解的子问题。通常来说这样做时间复杂度是指数级的,但是如果所有不同的子问题的数目是多项式级别,那么多项式时间就可以解决这个问题,这就是 dp 的本质
dp有三个要素:
(1)所有不同的子问题组成的表
(2)问题解决的依赖关系,这可以看成是一个 图
(3)填充子问题表的顺序(实际上是这个图的一个拓扑排序)
如果状态数量为O(nt),转移需要依赖于其它O(ne)个子问题,那么称这个问题是tD/eD的
这样可以得到四类典型的动态规划方程
1D/1D:已知D[0],方程为
E[j]=min {
D[i]+w(i,j) } f(j)≤i<j
2D/0D:已知D[i][0]和D[0][j],方程为
E[i][j]=min {
D[i−1][j]+xi,D[i][j−1]+yi,D[i−1][j−z]+zi,j }
2D/1D:已知D[i][i]=0,方程为
E[i][j]=w(i,j)+min {
C[i,k−1]+C[k,j] } i<k≤j
2D/2D:已知D[i,0]和D[0,j],