特点
- 把原来问题分解成相似的子问题。
- 所有子问题只解决一次。
- 储存子问题的解。
本质
对问题 状态的定义和 转移方程的定义(状态与状态之间的递推关系)
思考方式
- 定义状态
- 状态间转移方程的定义
- 状态的初始化
- 返回结果
典型问题
-
斐波那契数列
-
变态青蛙跳台阶
-
最大连续子数组和
https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof/ -
字符串分割
https://leetcode-cn.com/problems/word-break/ -
0-1背包问题
KS(i,j):代表当前背包剩余容量为j时,前i个物品最佳组合所对应的价值;
那这里的递推关系式是怎样的呢?对于第i个物品,有两种可能:1)背包剩余容量不足以容纳该物品,此时背包的价值与前i-1个物品的价值是一样的,KS(i,j) = KS(i-1,j)
2)背包剩余容量可以装下该商品,此时需要进行判断,因为装了该商品不一定能使最终组合达到最大价值,如果不装该商品,则价值为:KS(i-1,j),如果装了该商品,则价值为KS(i-1,j-wi) + vi,从两者中选择较大的那个,所以就得出了递推关系式:
https://www.cnblogs.com/mfrank/p/10533701.html -
回文串分割
https://leetcode-cn.com/problems/palindrome-partitioning/