kyrie
kyrie
发布于 2025-11-03 / 18 阅读
0
0

动态规划

动态规划(Dynamic Programming,DP)是一种把大问题拆成小问题、记住小问题答案、用表格或记忆化避免重复计算的方法,常用于最优值与计数类题目。

何时用 DP

  • 存在最优子结构:整体最优由若干子问题的最优组成。

  • 存在重叠子问题:相同子问题会被多次用到。

  • 无后效性:状态一旦确定,不再依赖未来选择。

三种写法

  • 自顶向下:DFS + 记忆化/备忘录(memo),写起来直观。

  • 自底向上:填表(tabulation),顺序可控、常更快。

  • 状态压缩:在不丢信息的前提下减少维度/空间(如滚动数组、位压缩)。

设计五步法

  1. 状态定义f[索引,约束] 表示的含义要说清楚。

  2. 转移方程:从哪些子状态来,取max/min/sum

  3. 边界初始化:起点值、不可达用 - \infin0

  4. 遍历顺序:保证用到的子状态已计算好(如背包容量要倒序)。

  5. 答案位置:是f[N]、f[N][W] 还是整张表的最值?

矩阵连乘问题

最长公共子序列


评论