深入浅出:动态规划 (DP)

不要被高大上的名字吓到。动态规划本质上就是:记住过去,指导未来

一秒钟听懂动态规划(1+1比喻)

有人问你:1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 = ?

你费力地数了一下,回答:"8"

接着,那个人在后面又加了一个 + 1,问你:"现在等于几?"

你会毫不犹豫地回答:"9"

为什么这次你算得这么快?

因为你 记住了 前面的结果是 8,你只需要算 8 + 1 = 9,而不需要从头再数一遍。 这就是动态规划的核心:将大问题拆解为小问题,并把小问题的答案存起来,避免重复计算。

实战演示:网格路径问题 (Unique Paths)

规则:机器人从左上角出发,每次只能 向右向下 走一步。问到达右下角有多少种不同的路径?

进度: 1 / 43
起点1
终点

当前步骤解析

【初始化】机器人在起点 (0, 0),原地不动算作 1 条路径。
// 状态转移方程
dp[0][0] = 1
正在计算
依赖状态
已计算
未计算

1. 定义状态

确定我们要记录的"结果"是什么。我们定义 dp[i][j] 表示:从起点到达格子 (i, j) 的总路径数。

2. 状态转移方程

找出现状和过去的关系。要到当前格子,只能从上面来或从左边来:
dp[i][j] = dp[i-1][j] + dp[i][j-1]

3. 边界初始化

最基础、不用算就知道答案的情况。第一行只能一直往右走,第一列只能一直往下走,所以路径数都是 1。