DP
class Solution:
def maxValue(self, grid: List[List[int]]) -> int:
dp = grid
for i in range(len(grid)):
for j in range(len(grid[0])):
if i > 0 and j > 0:
dp[i][j] += max(dp[i-1][j], dp[i][j-1])
elif i > 0 and j == 0:
dp[i][j] += dp[i-1][j]
elif i == 0 and j > 0:
dp[i][j] += dp[i][j-1]
print(dp)
return dp[-1][-1]
DP优化
当 grid 矩阵很大时, i=0 或 j=0的情况仅占极少数,相当循环每轮都冗余了一次判断。因此,可先初始化矩阵第一行和第一列,再开始遍历递推。
class Solution:
def maxValue(self, grid: List[List[int]]) -> int:
dp = grid
for j in range(1, len(dp)): # 初始化第一行
dp[0][j] += dp[0][j - 1]
for i in range(1, len(dp[0])): # 初始化第一列
dp[i][0] += dp[i - 1][0]
for i in range(len(grid)):
for j in range(len(grid[0])):
dp[i][j] += max(dp[i-1][j], dp[i][j-1])
return dp[-1][-1]