Update 47. 礼物的最大价值.md

补充动态规划状态转移方程与滚动数组优化的推导说明,并补充一维数组滚动更新的示意配图。
This commit is contained in:
CyC2018
2026-10-30 20:18:04 +08:00
parent 85821d0183
commit 77cbf36358
2 changed files with 5 additions and 1 deletions
+5 -1
View File
@@ -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] 是左方格子刚更新的结果。以上面棋盘的第二行为例:
<div align="center"> <img src="pics/offer47-rolling-dp.png" width="640px"/> </div><br>
```java
public int jewelleryValue(int[][] frame) {
Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB