剑指 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]

浙公网安备 33010602011771号