动态规划
动态规划经常用于优化递归问题。对于某些问题,如果使用递归的方法会重复计算很多sub problem,利用动态规划的方法就可以减少很多计算过程。
1. 适用于DP的题目特点
- 计数
- 有多少种方式到达终点
- 有多少种方法decode
- 求最值
- 最长上升子序列
- 左上角走到右下角路径的最大数字和
- 求存在性
- 游戏先手是否必胜
- 能否选出k个数和为sum
2. 算法核心
- 确定状态
- 最后一步:看最优策略的最后一步
- 子问题:子问题应和原问题类似,但规模不同
- 列出转移方程
- 确定初始条件和边界情况
- 初始条件:用转移方程无法计算的
- 确定计算顺序:自底而上的
- 当计算f(x)时,f(x-1), f(x-2)...已经有结果了