題目描述:
在乙個 m*n 的棋盤的每一格都放有乙個禮物,每個禮物都有一定的價值(價值大於 0)。你可以從棋盤的左上角開始拿格仔裡的禮物,並每次向右或者向下移動一格、直到到達棋盤的右下角。給定乙個棋盤及其上面的禮物的價值,請計算你最多能拿到多少價值的禮物?題目分析:此類題目做的多了,思路就比較清晰了。下面用例子來說明:
設棋盤如下:(grid來表示棋盤:3 x 3)
【1, 3, 1】
【1, 5, 1】
【4, 2, 1】
現在來分析:
設定乙個陣列res,記錄走過路線上的最大值。如果從grid[0][0]走到grid[0][2]:
在res[0][0]時,最大值為res[0][0] = grid[0][0] = 1;
res[0][0] -> res[0][1]時,最大值為res[0][1] = res[0][0] + grid[0][1] = 1 + 3 = 4;
res[0][1] -> res[0][2]時,最大值為res[0][2] = res[0][1] + grid[0][2] = 4 + 1 = 5;
同理:從grid[0][0]到grid[2][0]也類似;
下來分析出了第一行和第一列的最大值:
可以看出:res[1][1] = grid[1][1] + max(res[1][0], res[0][1]);
思路分析:
設定res,先分別求出走第1行和第1列時每個位置的最大值;然後計算出其它行的最大值,其他行的最大值等於
這裡直接給出一維陣列的解法。
public
intmaxvalue
(int
grid)
for(
int i =
1; i < m; i++)}
return dp[n -1]
;}
(完) 劍指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 輸出 ...