动态规划|刷题日记

250 阅读1分钟

引言

动态规划是一个很大的领域,涉及到的问题可能会很复杂,比如怎么如何想到这是一个动态规划问题以及如何确定递推公式?难归难,但是基本的简单动态规划还是需要会的。

动态规划方法论

动态规划,英文:Dynamic Programming,简称DP,动态规划中每一个状态一定是由前面的状态推导出来的。

动态规划解题五步曲:

  1. 确定dp数组(dp table)以及下标的含义
  2. 确定递推公式
  3. dp数组如何初始化
  4. 确定遍历顺序
  5. 举例推导dp数组验证

有些情况当前状态只与确定的前几个状态有关,那么我们可以不存储dp数组,改用几个变量维护前几个状态就行

关于DEBUG:

做动规的题目,写代码之前一定要把状态转移在dp数组的上具体情况模拟一遍,心中有数,确定最后推出的是想要的结果。

找问题的最好方式就是把dp数组打印出来,看看究竟是不是按照自己思路推导的!

必刷题

509. 斐波那契数

70. 爬楼梯

746. 使用最小花费爬楼梯

62. 不同路径

63. 不同路径 II

343. 整数拆分

96. 不同的二叉搜索树