动态规划-剑指 Offer 47. 礼物的最大价值

170 阅读1分钟

题目链接

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]