diff --git a/notes/47. 礼物的最大价值.md b/notes/47. 礼物的最大价值.md index 96aac6f5..ed943dce 100644 --- a/notes/47. 礼物的最大价值.md +++ b/notes/47. 礼物的最大价值.md @@ -17,7 +17,11 @@ ## 解题思路 -应该用动态规划求解,而不是深度优先搜索,深度优先搜索过于复杂,不是最优解。 +深度优先搜索要枚举所有路径,路径数随棋盘大小指数增长;用动态规划每个格子只需计算一次。 + +设 dp[i][j] 为走到格子 (i, j) 时拿到的最大价值。只能从上方或左方到达,因此 dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + 礼物价值。按行计算时只用到上一行,代码用一维数组滚动:更新 dp[i] 之前,dp[i] 是上方格子的结果,dp[i - 1] 是左方格子刚更新的结果。以上面棋盘的第二行为例: + +