代金券組合(DP)

2021-10-04 03:38:57 字數 1227 閱讀 5922

假設現有100元的商品,而代金券有50元、30元、20元、5元四種,則最佳優惠是兩張50元面額的代金券;而如果現有65元的商品,則最佳優惠是兩張30元代金券以及一張5元代金券。

給定目標金額和代金券種類,假設每類代金券數量無限多,求可以滿足目標金額所需的最少代金券數量。如果沒有任何組合可以滿足,則輸出impossible

**如下:

//money目標金額

//arr代金券陣列

//stack當前遍歷路徑

//res結果陣列,最終要在裡面選最小的

//current

let min = number.

max_value

function

getmax

(money, arr, stack, res, current)

}else

if(currentnum === money)

return min === number.

max_value

?'impossible'

: min

}

對於求極值問題,主要考慮動態規劃來做,好處是保留了一些中間狀態的計算值,可以避免大量的重複計算。我們維護乙個一維動態陣列 dp,其中 dp[i] 表示目標金額為i時的最小代金券數。那麼我們就可以首先將dp所有元素初始化為最大值,然後對於dp[i],分別使用所有代金券來更新他的最小值,更新的狀態轉移方程就是用

dp[i]

=min

(dp[i]

, dp[i - coins[j]]+

1);

舉個直觀一點的例子來看就是,目標金額為100,當我只有5元代金券,dp[100]當然就是20

當我又有20元代金券,那麼我可以選擇用或者不用,不用的話dp[100]依然是20,用了的話dp[100]就變成的dp[80] + 1,

同理,當30元和50元的代金券到來時用同樣的方法計算

**如下:

function

getmax

(money, arr)}}

return dp[money]

=== number.

max_value-10

?'impossible'

: dp[money]

}

名人堂與代金券

對於在中國大學mooc 學習 資料結構 課程的學生,想要獲得一張合格證書,總評成績必須達到 60 分及以上,並且有另加福利 總評分在 g,100 區間內者,可以得到 50 元 pat 代金券 在 60,g 區間內者,可以得到 20 元pat代金券。全國考點通用,一年有效。同時任課老師還會把總評成績前...

名人堂與代金券

sort 7 3 名人堂與代金券 25分 對於在中國大學mooc 學習 資料結構 課程的學生,想要獲得一張合格證書,總評成績必須達到 60 分及以上,並且有另加福利 總評分在 g,100 區間內者,可以得到 50 元 pat 代金券 在 60,g 區間內者,可以得到 20 元pat代金券。全國考點通...

PTA 名人堂與代金券

對於在中國大學mooc 學習 資料結構 課程的學生,想要獲得一張合格證書,總評成績必須達到 60 分及以上,並且有另加福利 總評分在 g,100 區間內者,可以得到 50 元 pat 代金券 在 60,g 區間內者,可以得到 20 元pat代金券。全國考點通用,一年有效。同時任課老師還會把總評成績前...