← 返回目录

方法论

第 9 / 42 卷日期:

方法论

动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的。

dp五步曲

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

注意:

dp 初始化 case 的情况,一般要放在函数开头前单独处理,防止dp数组index越界....

比如,509. 斐波那契数 if (n <= 1) return n; 需要单独处理。

否则,当n==1时,初始化访问dp[1]数组将越界...

dp debug方法

打印 dp 数组日志,并查看与自己想模拟的dp值是否一致

若 dp 值与自己模拟的结果一致,说明是 dp五步曲中的2、3、4步骤出现问题;

若 dp 值与自己模拟的结果不一致,说明是自己代码细节有问题

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

初识DP

图 11-1
图 11-1
全站分卷索引 · 42 卷
  1. 1代码随想录知识星球精华(最强八股文)第五版(算法篇)
  2. 2找出所有子集的异或总和再求和
  3. 3哈希表
  4. 4哈希冲突
  5. 5红黑树与AVL树
  6. 6平衡二叉树(AVL树)
  7. 7将有序数组转换为二叉搜索树
  8. 83. 分割(组合问题)
  9. 9方法论
  10. 10509. 斐波那契数
  11. 1162. 不同路径
  12. 1296. 不同的二叉搜索树
  13. 13322. 零钱兑换
  14. 14爬楼梯
  15. 15背包小总结 (01背包、完全背包)
  16. 16子序列问题
  17. 17674. 最长连续递增序列
  18. 18115. 不同的子序列
  19. 19总结
  20. 20技巧总结
  21. 21时间序列模型
  22. 22区间DP模型
  23. 23664. 奇怪的打印机
  24. 24编辑距离
  25. 25回文串
  26. 26DP递推公式总结
  27. 27排序算法
  28. 28其他算法
  29. 294. 分别用递归和非递归方式实现二叉树先序、中序和后序遍历
  30. 302. TOP N问题
  31. 313. 分布式的TOP N问题
  32. 322. Astar数据结构 + 公式
  33. 334. 代码实现
  34. 345. 总体代码
  35. 35堆排序
  36. 36单源最短路
  37. 37思维导图
  38. 38链表
  39. 39回溯
  40. 40贪心
  41. 41动态规划
  42. 42排序