題目
在一個 m*n 的棋盤的每一格都放有一個禮物,每個禮物都有一定的價值(價值大于 0)。你可以從棋盤的左上角開始拿格子里的禮物,并每次向右或者向下移動一格、直到到達(dá)棋盤的右下角。給定一個棋盤及其上面的禮物的價值,請計算你最多能拿到多少價值的禮物?
示例 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
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/li-wu-de-zui-da-jie-zhi-lcof
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
思路
動態(tài)規(guī)劃,屬于比較容易的題目。
每個格子都只有兩種可能:
- 從上面下來的;
- 從左邊過來的。
所以只要取一個比較大的值就行了。
代碼
class Solution:
def maxValue(self, grid: List[List[int]]) -> int:
for i in range(1, len(grid[0])) :
grid[0][i] = grid[0][i-1]+grid[0][i]
for i in range(1, len(grid)):
grid[i][0] = grid[i-1][0] + grid[i][0]
for i in range(1, len(grid)):
for j in range(1, len(grid[0])):
grid[i][j] += grid[i-1][j] if grid[i-1][j] > grid[i][j-1] else grid[i][j-1]
return grid[-1][-1]