題目描述
在一個 m*n 的棋盤的每一格都放有一個禮物,每個禮物都有一定的價值(價值大於 0)。你可以從棋盤的左上角開始拿格子裏的禮物,並每次向右或者向下移動一格、直到到達棋盤的右下角。給定一個棋盤及其上面的禮物的價值,請計算你最多能拿到多少價值的禮物?
算法思路
很顯然,由於左上角開始拿格子裏的禮物,並每次向右或者向下移動一格、直到到達棋盤的右下角導致實際上每一格所能有的最大價值是上面一格或左面一格的最大值+當前位置的價值。
這是典型的動態規劃,且二維。
class Solution:
def maxValue(self, grid: List[List[int]]) -> int:
m,n=len(grid),len(grid[0])
dp=[[0 for i in range(n+1)]for j in range(m+1)]
for i in range(m):
for j in range(n):
dp[i+1][j+1]=max(dp[i+1][j],dp[i][j+1])+grid[i][j]
return dp[-1][-1]
行用時 :52 ms, 在所有 Python3 提交中擊敗了91.45%的用戶
內存消耗 :15.5 MB, 在所有 Python3 提交中擊敗了100.00%的用戶