这篇文章主要介绍了LeetCode算法题目之如何计算礼物的最大价值,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?
[
[1,3,1],
[1,5,1],
[4,2,1]
]
premx
就是两者中的较大值dp[r,c] = max(dp[r-1,c], dp[r,c-1]) + grid[r][c] (r-1>=0 and c-1>=0)
r-1>=0 and c-1>=0
时), 有:premx = 0
premx = grid[r - 1][c]
premx = grid[r][c - 1]
premx
置为 0, 然后如果左边或者上边一格存在的话, 就更新
premx
为其中的较大值即可grid[r][c]
累加之前计算的
premx
即可, 这样就不需要额外 dp 矩阵了class Solution:
def maxValue(self, grid: List[List[int]]) -> int:
rows, cols = len(grid), len(grid[0])
for r in range(rows):
for c in range(cols):
# 分别求左边一格和上边一格(如果存在的话)的最大价值, 取较大的就是当前格子之前所能取到的最大价值premx
# premx加上当前礼物价值, 即为当前格子所能获得的最大价值
premx = 0
if r - 1 >= 0:
premx = max(premx, grid[r - 1][c])
if c - 1 >= 0:
premx = max(premx, grid[r][c - 1])
# 原地修改矩阵, 累加premx
grid[r][c] += premx
# 最后结果即为右下角的值
return grid[rows - 1][cols - 1]
感谢你能够认真阅读完这篇文章,希望小编分享的“LeetCode算法题目之如何计算礼物的最大价值”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。