返回全部文章

学动态规划,先别急着背转移方程

很多人一学动态规划,就想先把方程背下来。

很多人一学动态规划,就想先把方程背下来。

但动态规划真正的入口,通常不是方程,而是状态定义。

为什么背方程不够

因为同一个题型,只要题目稍微换个壳:

  • 状态就可能变
  • 边界条件就可能变
  • 转移含义也会跟着变

如果你记住的只是一个公式,那它很难迁移到下一题。

动态规划最该先写的那句话

我更建议先写一句中文:

dp[i]dp[i][j] 到底表示什么?

这句话如果写不清楚,后面的很多推导都只是在“猜”。

为什么状态定义是根

因为转移方程本质上是在描述:

  • 这个状态怎么从更小的问题得到

如果状态本身含义模糊,你根本无法判断:

  • 转移是否完整
  • 是否有重复
  • 是否漏掉边界

一个更稳的顺序

我自己更习惯按这个顺序想:

  1. 状态是什么
  2. 选择是什么
  3. 转移怎么来
  4. 初始条件是什么
  5. 最后答案取哪里

这五步里,第一步没稳,后面通常都会摇晃。

结论

动态规划的真正起点不是记公式,而是把状态含义说清楚。

因为只有状态明确了,转移才会真正有根。