Dynamic Programming 动态规划笔记

108 阅读1分钟

动态规划

动态规划经常用于优化递归问题。对于某些问题,如果使用递归的方法会重复计算很多sub problem,利用动态规划的方法就可以减少很多计算过程。

1. 适用于DP的题目特点

  • 计数
    • 有多少种方式到达终点
    • 有多少种方法decode
  • 求最值
    • 最长上升子序列
    • 左上角走到右下角路径的最大数字和
  • 求存在性
    • 游戏先手是否必胜
    • 能否选出k个数和为sum

2. 算法核心

  1. 确定状态
    • 最后一步:看最优策略的最后一步
    • 子问题:子问题应和原问题类似,但规模不同
  2. 列出转移方程
  3. 确定初始条件和边界情况
    • 初始条件:用转移方程无法计算的
  4. 确定计算顺序:自底而上的
    • 当计算f(x)时,f(x-1), f(x-2)...已经有结果了