【千字分析】剑指 Offer 47. 礼物的最大价值
生活随笔
收集整理的這篇文章主要介紹了
【千字分析】剑指 Offer 47. 礼物的最大价值
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
我是小張同學(xué),立志用更簡潔的代碼做更高效的表達(dá)
在一個 m*n 的棋盤的每一格都放有一個禮物,每個禮物都有一定的價值(價值大于 0)。你可以從棋盤的左上角開始拿格子里的禮物,并每次向右或者向下移動一格、直到到達(dá)棋盤的右下角。給定一個棋盤及其上面的禮物的價值,請計(jì)算你最多能拿到多少價值的禮物?
示例 1:
?
輸入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
輸出: 12
解釋: 路徑 1→3→5→2→1 可以拿到最多價值的禮物
提示:
?
0 < grid.length <= 200
0 < grid[0].length <= 200
動態(tài)規(guī)劃(二維):
第一時間想到二維dp數(shù)組,其中dp[i][j]為到第i行第j列時可獲得的最大價值。
第i行第j列的最大價值(dp[i][j])可以為:
- 左邊一格的最大價值(dp[i][j - 1])加目前格子(grid[i][j])
- 上面一格的最大價值(dp[i - 1][j])加目前格子(grid[i][j])
那么轉(zhuǎn)移方程為:
dp[i][j]=max(dp[i?1][j],dp[i][j?1])+grid[i][j]dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + grid[i][j]dp[i][j]=max(dp[i?1][j],dp[i][j?1])+grid[i][j]
考慮邊界情況:
- i == 0, j == 0, 最左上角直接為格子本身(grid[i][j])
- i == 0, j != 0, 第一行沒有上面格子只能是左邊一格的最大價值(dp[i][j - 1])加目前格子(grid[i][j])
- i != 0, j == 0, 第一列沒有左邊格子只能是上面一格的最大價值(dp[i - 1][j])加目前格子(grid[i][j])
總結(jié)
以上是生活随笔為你收集整理的【千字分析】剑指 Offer 47. 礼物的最大价值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【千字分析】剑指 Offer 46. 把
- 下一篇: Leecode-198. 打家劫舍——动