在乙個 m*n 的棋盤的每一格都放有乙個禮物,每個禮物都有一定的價值(價值大於 0)。你可以從棋盤的左上角開始拿格仔裡的禮物,並每次向右或者向下移動一格、直到到達棋盤的右下角。給定乙個棋盤及其上面的禮物的價值,請計算你最多能拿到多少價值的禮物?
示例 1:輸出: 12輸入: [ [1,3,1], [1,5,1], [4,2,1] ]
解釋: 路徑 1→3→5→2→1 可以拿到最多價值的禮物
解題思路:
因為是篩選了動歸標籤出來的題,所以很容器就想到要用動歸來解了。而且題幹裡把動歸的推演公式也描述的非常清楚,直接上吧:
class solution
int column = grid[0].length;
int dp = new int[row+1][column+1];
// 沒有必要設定result,右下角的一定是最大的
// int result = 0;
for(int i = 1; i < grid.length; i++)
}return dp[row][column];
}}
優化部分:
一開始用了乙個result值來記錄max,後來看了題解後發現並沒有必要,最右下角的一定是最大的
dp構建時多增加了一行一列,可以巧妙繞過邊界問題
題解最高讚是在grid原有陣列的基礎上做dp,可以減少空間複雜度
最高贊答:
class solution
}
劍指Offer 禮物的最大價值
題目 在乙個m n的棋盤的每乙個格都放有乙個禮物,每個禮物都有一定價值 大於0 從左上角開始拿禮物,每次向右或向下移動一格,直到右下角結束。給定乙個棋盤,求拿到禮物的最大價值。例如,對於如下棋盤 1 10 3 8 12 2 9 6 5 7 4 11 3 7 16 5禮物的最大價值為1 12 5 7 ...
劍指offer 禮物的最大價值
題目 禮物的最大價值 在乙個m n的棋盤的每一格都放有乙個禮物,每個禮物都有一定的價值 價值大於0 你可以從棋盤的左上角開始拿格仔裡的禮物,並每次向右或者向下移動一格直到到達棋盤的右下角。給定乙個棋盤及其上面的禮物,請計算你最多能拿到多少價值的禮物?如給定棋盤如下 1 10 3 8 12 2 9 6...
劍指offer 禮物的最大價值
在乙個 m n 的棋盤的每一格都放有乙個禮物,每個禮物都有一定的價值 價值大於 0 你可以從棋盤的左上角開始拿格仔裡的禮物,並每次向右或者向下移動一格 直到到達棋盤的右下角。給定乙個棋盤及其上面的禮物的價值,請計算你最多能拿到多少價值的禮物?示例 1 輸入 1,3,1 1,5,1 4,2,1 輸出 ...