动态规划(Dynamic Programming)
- 动态规划简称 DP,其定义是
动态规划是分治思想的延伸,通俗一点来讲就是大事化小,小事化无的艺术。
在将大问题化解为小问题的分治过程中,保存对这些小问题已经处理好的结果,并供后面处理更大规模的问题时直接使用这些结果- 动态规划具备了以下三个特点:
- 把原来的问题分解成了几个相似的子问题
- 所有的子问题都只需要解决一次
- 储存子问题的解
- 动态规划的本质,是对问题状态的定义和状态转移方程的定义(状态以及状态之间的递推关系)
- 动态规划问题一般从以下四个角度考虑:
- 状态的定义(定义的状态一定要形成递推关系)
- 状态间的转移方程定义
- 状态的初始化
- 返回结果
- 总结:三特点四要素两本质
- 适用场景:最大值/最小值,可不可行,是不是,方案个数
1. 斐波拉契数列
2. 字符串分割
3. 三角阵的最小路径和
4. unique-paths
5. 矩阵覆盖
参考矩阵覆盖
6. 青蛙跳台阶
参考青蛙跳台阶
7. 背包问题
参考背包问题
8. 回文串分割
参考回文串分割
9. 编辑距离(edit-distance)
10. distinct-subsequences
11. 钢条分割
参考钢条分割
12. 小朋友过桥
参考小朋友过桥
13. 字符串转回文串
参考字符串转回文串