假設現有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代金券。全國考點通用,一年有效。同時任課老師還會把總評成績前...