劍指Offer對答如流系列 禮物的最大價值

2022-08-30 02:12:09 字數 857 閱讀 4175

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

比如下面的棋盤中,如果按照紅色數字的路線走可以拿到最大價值為53的禮物

動態規劃:定義f(i,j)為到達(i,j)位置格仔時能拿到的禮物總和的最大值,則有:f(i,j)=max+values(i,j)。(i,j)的可能由(i-1,j)或(i,j-1)到的

同上道題一樣劍指offer對答如流系列 - 把數字翻譯成字串,如果直接使用遞迴會產生大量的重複計算,因此,建立輔助的陣列來儲存中間計算結果。

輔助陣列不用和m*n的二維陣列一樣大,只需要儲存上一層的最大值就可以。可以使用長度為列數n的一位陣列作為輔助陣列。不過為了便於理解,**中使用二維輔助陣列。

public int maxvalueofgifts(int values) 

int rows=values.length;

int cols=values[0].length;

int maxvalue=new int[rows][cols];

arrays.fill(maxvalue, 0);

for(int i=0;i0)

if(j>0)

maxvalue[i][j]=math.max(up, left)+values[i][j];}}

return maxvalue[rows-1][cols-1];

}

劍指Offer對答如流系列 醜數

我們把只包含質因子2 3和5的數稱作醜數 ugly number 求按從小到大的順序的第n個醜數。例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。判斷乙個數是不是醜數,最容易想到的方法就是讓這個數不斷除以2,3,5。對於第n個醜數,只要從1開始,依次判斷每個數是不...

劍指Offer對答如流系列 剪繩子

給你一根長度為n繩子,請把繩子剪成m段 m n都是整數,n 1並且m 1 每段的繩子的長度記為k 0 k 1 k m k 0 k 1 k m 可能的最大乘積是多少?例如當繩子的長度是8時,我們把它剪成長度分別為2 3 3的三段,此時得到最大的乘積18。遇到問題,先分析問題,由分析的結果確定所運用的演...

劍指Offer對答如流系列 包含min函式的棧

定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式。在該棧中,呼叫min push及pop的時間複雜度都是o 1 push 和 pop均容易實現。主要就是min函式的定義,如果要通過操作push和pop操作獲取最小元素時間複雜度為o 1 基本上是不可能的。如果我們另外定義乙個成員...