time limit: 1000ms memory limit: 65536k
小p非常喜歡玩dota,不分晝夜的玩
,結果他連做夢也都是裡面的畫面,一天晚上小p剛躺下就做了乙個神奇的夢。。。
不死族的巫妖王發工資拉,死亡騎士拿到一張n元的鈔票(記住,只有一張鈔票),為了防止自己在戰鬥中頻繁的死掉,他決定給自己買一些道具,於是他來到了地精商店前.
死亡騎士:"我要買道具!"
地精商人:"我們這裡有三種道具,血瓶150塊乙個,魔法藥200塊乙個,無敵藥水350塊乙個."
死亡騎士:"好的,給我乙個血瓶."
說完他掏出那張n元的大鈔遞給地精商人.
地精商人:"我忘了提醒你了,我們這裡沒有找客人錢的習慣的,多的錢我們都當小費收了的,嘿嘿."
死亡騎士:"......"
死亡騎士想,與其把錢當小費送個他還不如自己多買一點道具,反正以後都要買的,早點買了放在家裡也好,但是要盡量少讓他賺小費.
現在死亡騎士感覺自己的智商不夠用所以希望小p幫他計算一下,最少他要給地精商人多少小費.但是小p的智商可是出了名的「不忍直視」啊,聰明非凡的你所以你能幫幫他嗎?
輸入資料的第一行是乙個整數t(1<=t<=100),代表測試資料的數量.然後是t行測試資料,每個測試資料只包含乙個正整數n(1<=n<=10000),n代表死亡騎士手中鈔票的面值.
注意:地精商店只有題中描述的三種道具.
對於每組測試資料,請你輸出死亡騎士最少要浪費多少錢給地精商人作為小費.
2380
200
300
#include #include int dp[10010];
int main()
; while(~scanf("%d",&t))
{while(t--)
{memset(dp,0,sizeof(dp));
scanf("%d",&n);
for(i=0;i<3;i++)
{for(j=w[i];j<=n;j++)
{if(dp[j]
三種物品,每種價錢分別是150,200,350;
有n元錢,每件物品可以反覆買。
判定為完全揹包問題。
題目求的是剩餘零錢最少,可以輕鬆轉換為帶走價值最多。
dp存的是每乙個狀態下的最大價值;
所謂狀態,就是當揹包(即總錢數)為從w[i]~n的不同狀態下的可獲得最大價值;
每增加乙個硬幣的種類,就更新一遍狀態;
在消耗錢數的同時,也增加了價值,所以w同時代表體積和價值;
要注意,內迴圈要正序!!!!
因為是完全揹包,所以可以反覆取。。。
正序正好可以實現重複,而逆序不可以。
小P的故事 神奇的Dota
problem description 小p非常喜歡玩dota,不分晝夜的玩 結果他連做夢也都是裡面的畫面,一天晚上小p剛躺下就做了乙個神奇的夢。不死族的巫妖王發工資拉,死亡騎士拿到一張n元的鈔票 記住,只有一張鈔票 為了防止自己在戰鬥中頻繁的死掉,他決定給自己買一些道具,於是他來到了地精商店前.死...
SDUT 小P的故事 神奇的Dota
time limit 1000ms memory limit 65536k 小p非常喜歡玩dota,不分晝夜的玩 結果他連做夢也都是裡面的畫面,一天晚上小p剛躺下就做了乙個神奇的夢。不死族的巫妖王發工資拉,死亡騎士拿到一張n元的鈔票 記住,只有一張鈔票 為了防止自己在戰鬥中頻繁的死掉,他決定給自己買...
小P的故事 神奇的飯卡
time limit 1000ms memory limit 65536k 話說sdut大學馳名已久,所以吸引了無數2014級的小學弟 小學妹們前來參加藝考,為了配合學校高大形象,校餐廳特提議推出一款高階大氣上檔次的神奇飯卡,供學弟 學妹們使用。這個飯卡十分的神奇,如果購買乙個商品之前,卡上的剩餘金...