寒冰王座 記憶化搜尋or01揹包)

2021-09-13 23:47:16 字數 1444 閱讀 5098

不死族的巫妖王發工資拉,死亡騎士拿到一張n元的鈔票(記住,只有一張鈔票),為了防止自己在戰鬥中頻繁的死掉,他決定給自己買一些道具,於是他來到了地精商店前.

死亡騎士:"我要買道具!"

地精商人:"我們這裡有三種道具,血瓶150塊乙個,魔法藥200塊乙個,無敵藥水350塊乙個."

死亡騎士:"好的,給我乙個血瓶."

說完他掏出那張n元的大鈔遞給地精商人.

地精商人:"我忘了提醒你了,我們這裡沒有找客人錢的習慣的,多的錢我們都當小費收了的,嘿嘿."

死亡騎士:"......"

死亡騎士想,與其把錢當小費送個他還不如自己多買一點道具,反正以後都要買的,早點買了放在家裡也好,但是要盡量少讓他賺小費.

現在死亡騎士希望你能幫他計算一下,最少他要給地精商人多少小費.

input

輸入資料的第一行是乙個整數t(1<=t<=100),代表測試資料的數量.然後是t行測試資料,每個測試資料只包含乙個正整數n(1<=n<=10000),n代表死亡騎士手中鈔票的面值.

注意:地精商店只有題中描述的三種道具.

output

對於每組測試資料,請你輸出死亡騎士最少要浪費多少錢給地精商人作為小費.

sample input

2

900250

sample output

0

50

這個題目我首先想到的還是遞迴,不知為何,我想也沒想的就提交了,結果超時,唉,我總想碰一下運氣,明知道會超時的。然後就考慮記憶化搜尋,em,比上次寫的時候順暢了不少。

思路:遞迴+記憶化,有150,200,350的裝備,每個東西都有買與不買兩種情況,遞迴嘛,非常非常注重邊界,還有就是開全域性陣列儲存狀態。剩下的在**裡注釋了。

附加:我忽而發現也可以轉化為01揹包問題,我看很多的部落格都是按完全揹包問題(就是每件物品可以無限取)做的,就算是無限取,也要在揹包容量還能裝的時候吧,所以每一件物品可以變成可以裝滿揹包的最小件件數。再套01揹包的模板就可以了。

記憶化搜尋**:

#include#include#include#include#include#include #include #include #include#include#include #include#include #include #define  inf  0x3f3f3f3f

typedef long long ll;

ll ans[10010];//全域性陣列

using namespace std;

ll solve(ll n);

ll min(ll a,ll b,ll c)

int main()

;int main()

}for(ll i=1;i=vc[i];j--)

}printf("%lld\n",n-dp[n]);

}}

完全揹包 寒冰王座

時間限制 1 sec 記憶體限制 128 mb 提交 3 解決 3 提交 狀態 討論版 命題人 add cst 不死族的巫妖王發工資拉,死亡騎士拿到一張n元的鈔票 記住,只有一張鈔票 為了防止自己在戰鬥中頻繁的死掉,他決定給自己買一些道具,於是他來到了地精商店前.死亡騎士 我要買道具 地精商人 我們...

寒冰王座(dp) 完全揹包

死族的巫妖王發工資拉,死亡騎士拿到一張n元的鈔票 記住,只有一張鈔票 為了防止自己在戰鬥中頻繁的死掉,他決定給自己買一些道具,於是他來到了地精商店前.死亡騎士 我要買道具 地精商人 我們這裡有三種道具,血瓶150塊乙個,魔法藥200塊乙個,無敵藥水350塊乙個.死亡騎士 好的,給我乙個血瓶.說完他掏...

HDU 寒冰王座 多重揹包

不死族的巫妖王發工資拉,死亡騎士拿到一張n元的鈔票 記住,只有一張鈔票 為了防止自己在戰鬥中頻繁的死掉,他決定給自己買一些道具,於是他來到了地精商店前.死亡騎士 我要買道具 地精商人 我們這裡有三種道具,血瓶150塊乙個,魔法藥200塊乙個,無敵藥水350塊乙個.死亡騎士 好的,給我乙個血瓶.說完他...