题目定位
每个格子只依赖上方和左方的路径数,因此它是二维 DP 的标准入门题。
关键观察
机器人走到某个格子,只可能来自两个前驱格子之一。
目标复杂度
O(mn) / O(mn)
这题的解法思路怎么拆
1
每个格子只依赖上方和左方的路径数,因此它是二维 DP 的标准入门题。
2
机器人走到某个格子,只可能来自两个前驱格子之一。
3
先用自然语言命名状态。
4
列出哪些决策会转移到这个状态。
参考实现
Python# Generic pattern template
# 1D DP
dp = [0] * (n + 1)
dp[0] = base
for i in range(1, n + 1):
dp[i] = transition(dp, i)
# 2D DP
dp = [[0] * (m + 1) for _ in range(n + 1)]
for i in range(1, n + 1):
for j in range(1, m + 1):
dp[i][j] = transition(dp, i, j)
常见坑点
warning
第一行和第一列 base case 没初始化好。
warning
坐标和 dp 下标概念混乱。
高频追问
如果加入障碍物,转移怎么变?
能把空间压到一行吗?
继续刷相关题
先把 动态规划 这个模式刷成体系,再去做更难变体。