不死族的巫妖王發工資拉,死亡騎士拿到一張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塊乙個.死亡騎士 好的,給我乙個血瓶.說完他...