动态规划

10,435 阅读1分钟

定义

把原问题视作若干个重叠子问题的逐层递进,每个子问题的求解过程都构成一个“阶段”。在完成前一个阶段的计算后,动态规划才会进行下一个阶段的计算。但仅当每个子问题的求解过程都是离散的,即不依赖于其他子问题时,动态规划才管用。

特性

无后效性:已求解的子问题不受后续阶段的影响。即动态规划对状态空间的遍历构成一张有向无环图,遍历顺序就是该有向无环图的一个拓扑序。
最优子结构:下一阶段的最优解应该能够由前面各阶段子问题的最优解导出。
子问题重叠性:问题可以视为若干个重叠子问题。
问题能用动态规划求解的三个条件是满足:无后效性,最优子结构,子问题重叠性。

解题步骤

每种动态规划解决方案都涉及网格,每一个单元格都是一个子问题,因此需要考虑如何将问题分成子问题,这有助于找出网格的坐标轴。注意,有时候动态规划问题的最终答案不在最后一个单元格中。
1、定状态:解动态规划时需要开一个数组dp,“状态”就是指数组的每个元素 dp[i]或dp[i][j]的含义;
2、定状态转移方程;
3、dp数组的初始化和边界情况的确定;
4、确定dp数组元数的计算顺序。