剑指 Offer 47. 礼物的最大价值

题目:在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。  中等

给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?

方法:动态规划  时间复杂度O(mn)  空间复杂度O(n)  

dp存放行走至当前格子礼物的最大价值,直接修改grid即可,节省空间

第一个格子不用管

当i == 0 j != 0 时,说明在第0行,只能向右走,故每次 + dp[i][j-1],在第0列同理

其他情况就判断上和左谁大,谁大从谁来 加上即可

def maxValue(grid):
        """
        :type grid: List[List[int]]
        :rtype: int
        """
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if i == 0 and j == 0:
                    continue
                elif i == 0 and j != 0:
                    grid[i][j] += grid[i][j-1]
                elif j == 0 and i != 0:
                    grid[i][j] += grid[i-1][j]
                else:
                    grid[i][j] += max(grid[i-1][j],grid[i][j-1])
        return grid[-1][-1]

 

posted @ 2022-08-06 22:45  Liang-ml  阅读(12)  评论(0)    收藏  举报