劍指Offer之禮物的最大價值

2021-10-07 12:46:49 字數 1189 閱讀 5040

題目描述:

在乙個 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 輸出 ...