mirror of
https://github.com/CyC2018/Interview-Notebook.git
synced 2026-10-31 02:53:42 +00:00
Update 47. 礼物的最大价值.md
补充动态规划状态转移方程与滚动数组优化的推导说明,并补充一维数组滚动更新的示意配图。
This commit is contained in:
@@ -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 |
Reference in New Issue
Block a user