动态规划:路径问题
下降最小路径和

1. 状态表示
假设用 dp[i][j] 表示到达位置 [i, j] 的最小路径和。
2. 状态转移方程
结合图片分析,若 A 点要到达三角形区域,需考虑 A 点上方的数通过最小路径到达 A。路径变为 x->A->三角形。根据状态表示,到达 A 点的最小路径可转换为 dp[i-1][j-1]、dp[i-1][j] 或 dp[i-1][j+1]。



文字总结:在 dp 表中每一个位置向下都有 3 种情况,根据这三种情况可以规划出动态方程。因为要求最小路径和,所以在三个路径下取最小值。状态转移方程为: dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i-1][j+1])) + d[i][j]
3. 初始化
初始化的目的是防止越界访问的问题。 由状态转移方程得出:dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i-1][j+1])) + d[i][j]。 我们需要上方的 3 个元素分别是 [i,j-1]、[i,j]、[i,j+1]。 所以需要添加 1 行 2 列,去避免数组越界的问题(圈圆圈的就是会越界的地方)。

【注意事项】
- 虚线里面的值是要保证不影响后面的操作,第一行就不要影响圆圈的值,可以把第一行初始化成 0。对于列:不要影响最小值的比对 min(x,y,z),那么把列初始化为正无穷大。

- d 表对应 dp 表下标的映射。


