Contents
Problem
背包問題,給有限的金額,求出怎麼買可以達到最高的喜好度。
商品不得重複,且當花超過 2000 元時,可以再多使用預算外的 200 元。
Solution
為了處理 2000 元這個條件,將 dp[0] = 0
,其餘 dp[x] = -1e9
,這樣就只有 dp[x]
等於零的才是剛好用完錢。
(就不會有高估使用金額的情況了)
把購買情況分成兩種,買 超過 2000 和 小於等於 2000,要找出以上兩種情況中的最大值(favour)。
要注意買未超 2000,卻還是多 200 元的情況。
e.g.
money = 1805
1. 買小於等於 2000,僅可使用 1805 (也就是買的總價格介於 0~1805)
2. 如果買超過 2000,可使用 1805 + 200 = 2005 (也就是買的總價格介於 2001~2005)
money = 2001
1. 0~2000
2. 2001~2201
money = 1800
1. 0~1800
2. _ (1800+200<2000)
Code
1 |
|