中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

LeetCode算法題目之如何計算禮物的最大價值

發布時間:2021-12-15 14:10:07 來源:億速云 閱讀:260 作者:小新 欄目:大數據

這篇文章主要介紹了LeetCode算法題目之如何計算禮物的最大價值,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

題目描述

在一個 m*n 的棋盤的每一格都放有一個禮物,每個禮物都有一定的價值(價值大于 0)。你可以從棋盤的左上角開始拿格子里的禮物,并每次向右或者向下移動一格、直到到達棋盤的右下角。給定一個棋盤及其上面的禮物的價值,請計算你最多能拿到多少價值的禮物?

  • 0 < grid.length <= 200
  • 0 < grid[0].length <= 200

題目樣例

示例

  • 輸入:
[
  [1,3,1],
  [1,5,1],
  [4,2,1]
]
  • 輸出: 12
  • 解釋: 路徑 1→3→5→2→1 可以拿到最多價值的禮物

題目思考

  1. 每一個格子的禮物最多價值跟什么有關?

解決方案

思路

  • 分析題目, 只能向右或向下移動, 那么每個格子的最大價值只受左邊一格和上邊一格(如果存在的話)的最大價值的影響, 所以當前格子之前所能獲得的最大價值               premx 就是兩者中的較大值
  • 假設 dp[r,c]代表格子(r,c)所能獲得的最大價值, 自然就有               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 為其中的較大值即可
  • 最終結果自然就是右下角的 dp 值
  • 以上就是典型的動態規劃的思想, 利用前面的計算結果來推導出當前的結果
  • 另外這里還可以進行空間上的優化, 就是直接基于原數組進行修改,               grid[r][c] 累加之前計算的               premx 即可, 這樣就不需要額外 dp 矩陣了
  • 下面的代碼對必要步驟有詳細的解釋, 方便大家理解

復雜度

  • 時間復雜度 O(RC): 只需要遍歷矩陣中的每個元素即可
  • 空間復雜度 O(1): 原地修改矩陣, 只使用了幾個變量

代碼

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算法題目之如何計算禮物的最大價值”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

禄丰县| 资兴市| 台前县| 舟曲县| 武威市| 安顺市| 昌吉市| 宜章县| 杨浦区| 嘉黎县| 永丰县| 无极县| 治多县| 盐城市| 错那县| 苍梧县| 彰化市| 池州市| 浪卡子县| 林甸县| 上思县| 镇康县| 鄂伦春自治旗| 宁河县| 潞城市| 崇明县| 贵港市| 墨玉县| 隆尧县| 家居| 汪清县| 南京市| 闽清县| 商丘市| 安吉县| 明溪县| 延庆县| 巴楚县| 灵宝市| 伊通| 枣阳市|