讲个身边的故事:去年学习动态规划时,最令人崩溃的时刻往往不是写不出状态转移方程,而是看题解时“感觉懂了”,等自己动手时却发现“完全想不起来”。题解通常会直接给出dp[i][j]的定义和递推公式,但关键问题——为什么要这样定义状态?为什么要这样转移?——这些核心思路常常被一笔带过。

在对比各大模型的推理能力时,Grok 4.3 在算法推导方面与 GPT-5.5 不相上下,但在“推导展开度”上明显更胜一筹。它不会跳过任何一个推导环节,每一步都有清晰的依据和解释。用它的原话说:“优化不是魔法,每一步空间压缩都有明确的数学依据。”
我花了几周时间让它系统讲解了几十道 DP 习题,从递归回溯到记忆化搜索再到动态规划,从二维数组到一维空间的优化。以下是完整的学习路径和实战经验总结。
一道编辑距离,两种完全不同的学习体验
GPT-5.5 解题时,倾向于直接给出最优解,中间的推导过程偶尔会跳步。Grok 4.3 的风格则完全相反——它更像一位耐心的教练,每一步推导都附带解释:为什么选择这个状态定义、为什么转移方程这样写、为什么边界条件这样处理。
以“最长回文子串”为例,Grok 4.3 的讲解路径是这样的:先讲暴力枚举的思路和复杂度分析,再引出中心扩展法的直觉来源,然后分析为什么 DP 解法可以从中心扩展法推导出来,最后讲解空间优化的数学依据。这四步走下来,你理解的不只是一道题的解法,而是“遇到回文类问题该如何思考”的方法论。
从递归到 DP 的四步推导法
Grok 4.3 在讲解每道 DP 题时,都会遵循一套固定的推导框架。这套框架本身,比任何单道题的解法都更有价值:
Step 1:定义状态——dp[i] 或 dp[i][j] 到底代表什么? Grok 4.3 会先解释“为什么选择这个定义”,而不是直接告诉你 dp[i] 表示什么。它会对比几种可能的定义方式,分析每种定义的优劣,然后选择最优的那个。
Step 2:推导转移方程——从最后一步反推。 这是 DP 最难的一步。Grok 4.3 的习惯是“从最后一步反推”——假设你已经知道了前面所有子问题的解,最后一步有几种选择?每种选择对应的代价是什么?这种“反推法”比正向思考更符合 DP 的思维方式。
Step 3:处理边界——空数组、单元素、负值。 Grok 4.3 会穷举所有可能出错的边界情况,不会漏掉任何一个。它还会解释“为什么这个边界要这样处理”,而不是简单地说“初始化为 0”。
Step 4:空间优化——从二维到一维,从 O(n²) 到 O(n)。 这是 Grok 4.3 最出彩的一步。它不会直接说“我们可以用滚动数组优化”,而是分析转移方程中每个 dp[i][j] 依赖哪些之前的状态,然后判断哪些维度可以压缩、哪些不行。它还会指出“这个优化在某些变种题里不适用”,让你理解优化的前提条件。
经典 DP 题型的通用模板
经过几十道 DP 习题的系统讲解,Grok 4.3 总结出了几类经典 DP 题型的通用模板:
| DP 类型 | 关键特征 | 状态定义模板 | 空间优化技巧 |
|---|---|---|---|
| 背包问题 | 有限容量 + 物品选择 | dp[i][w]:前 i 个物品,容量 w 的最大价值 | 逆序遍历,降为 dp[w] |
| 编辑距离 | 两个字符串的转换代价 | dp[i][j]:s1 前 i 个和 s2 前 j 个的最小代价 | 滚动数组,保留两行 |
| 最长子序列 | 序列中的选择/不选 | dp[i]:以第 i 个元素结尾的最优解 | 通常需记录所有位置,难优化 |
| 区间 DP | 区间合并的最优代价 | dp[i][j]:区间 [i, j] 的最优解 | 按区间长度递增,难优化 |
| 状态机 DP | 多状态间的转移 | dp[i][state]:第 i 天处于某状态的最优解 | 状态数少时原地更新 |
这些模板的价值在于:当遇到新题时,先判断属于哪个类型,再套用对应的思考框架,而不是从零开始摸索。
最实用的优化技巧清单
Grok 4.3 在讲解每道题时,都会单独强调“这道题的空间优化技巧”。以下是它反复使用的几类方法:
滚动数组——最常用的优化。 当 dp[i] 只依赖 dp[i-1] 时,可以用 dp[0] 和 dp[1] 交替滚动,空间从 O(n) 降为 O(1)。
逆序遍历——避免状态被覆盖。 在背包问题中,将容量维度的遍历顺序从正序改为逆序,可以确保每个物品只被使用一次。Grok 4.3 会解释“为什么逆序能避免覆盖”——因为每个 dp[w] 依赖的是上一行的 dp[w] 和 dp[w-wt[i]],逆序确保这些值还没被更新。
状态压缩——用二进制表示状态。 对于状态数有限的 DP,可以用一个整数的二进制位来表示多个布尔状态。Grok 4.3 在讲解旅行商问题时详细拆解了这种技巧。
剪枝——提前终止不可能的分支。 不是所有 DP 都需要穷举所有状态。Grok 4.3 会分析“什么情况下可以提前跳出循环”,比如背包问题中当剩余容量小于所有物品重量时可以直接返回。
DP 学习的三个层次与 AI 辅助的边界
用 Grok 4.3 学 DP 几周后,最大的感受是:AI 辅助把 DP 学习从“背题型”变成了“理解思维过程”。但 AI 也有明确的边界:
层次一(初级):理解状态定义和转移方程。 AI 能讲得很清楚,适合初学者。层次二(中级):推导空间优化和理解前提条件。 AI 能给出每一步的数学依据,但需要你自己判断在变种题中是否适用。层次三(高级):面对新题独立设计 DP 方案。 这是 AI 无法替代的——它只能帮你理解已有的解法,无法帮你建立“遇到新问题时的创造性思维”。
总结
Grok 4.3 在 DP 教学上的核心价值不是“通过率最高”,而是“推导过程最完整”。它不跳步、追根因的风格,恰好弥补了传统题解“只给答案不讲思路”的缺陷。从递归回溯到记忆化搜索再到 DP,从二维到一维的空间优化,每一步都有明确的依据和解释。
对于正在系统提升算法能力的开发者来说,Grok 4.3 是一个耐心、严谨、随时可追问的教练。它会告诉你“优化不是魔法,每一步空间压缩都有明确的数学依据”。知道每一步为什么这么走,比知道最终答案更重要。
