面試題47. 禮物的最大價值

題目

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

示例 1:

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

提示:

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

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/li-wu-de-zui-da-jie-zhi-lcof
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

思路

動態(tài)規(guī)劃,屬于比較容易的題目。
每個格子都只有兩種可能:

  1. 從上面下來的;
  2. 從左邊過來的。

所以只要取一個比較大的值就行了。
max(dp[i-1][j],dp[i][j-1])

代碼

class Solution:
    def maxValue(self, grid: List[List[int]]) -> int:
        for i in range(1, len(grid[0])) : 
            grid[0][i] = grid[0][i-1]+grid[0][i]
        for i in range(1, len(grid)):
            grid[i][0] = grid[i-1][0] + grid[i][0]
        for i in range(1, len(grid)):
            for j in range(1, len(grid[0])):
                grid[i][j] += grid[i-1][j] if grid[i-1][j] > grid[i][j-1] else grid[i][j-1]
        return grid[-1][-1]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容