动态规划先定义状态
514 字
3 分钟
动态规划先定义状态
动态规划先定义状态
动态规划最难的不是写循环,而是定义状态。状态定义错了,转移方程再漂亮也没有意义。
算法题真正要练的是把题目翻译成状态、边界和转移。模板可以帮助提速,但不能替代对条件的判断。
题型识别
我会按四步写:状态表示什么,初始值是什么,如何从旧状态转移,答案从哪里取。每一步都要能用自然语言解释。
遇到类似题时,我会先写一句话解释输入、输出和约束,再决定用什么结构。只要这一步说不清,直接写代码大概率会在边界条件上出错。
核心写法
def climb_stairs(n): if n <= 2: return n dp = [0] * (n + 1) dp[1], dp[2] = 1, 2 for i in range(3, n + 1): dp[i] = dp[i - 1] + dp[i - 2] return dp[n]边界样例
- 空输入或只有一个元素时,答案应该是什么。
- 元素重复时,比较关系是否仍然成立。
- 结果需要下标、长度、数量,还是具体路径。
- 时间复杂度能不能从每个元素处理次数解释出来。
复盘
复盘时先用小样例手算表格,再对照代码输出。只看最终答案,很难发现中间状态偏移。
最小验收样例
我会至少准备三个样例:一个普通样例,一个边界样例,一个专门卡比较条件的样例。算法代码最怕只过了题目给的样例,却没有覆盖空输入、重复元素或极端顺序。
写完后不要只看答案,还要能解释每一步状态为什么变化。只要能把状态变化讲清楚,换一个题面时就不容易机械套错模板。
小结
动态规划先定义状态 的练习重点,是把固定套路拆成可解释的判断。能说明为什么这样维护状态,才算真正掌握。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!













