小P的故事 神奇的Dota 完全揹包

2021-06-28 08:53:04 字數 1359 閱讀 7402

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代表死亡騎士手中鈔票的面值.

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

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

2 

380

200

30 

0

#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級的小學弟 小學妹們前來參加藝考,為了配合學校高大形象,校餐廳特提議推出一款高階大氣上檔次的神奇飯卡,供學弟 學妹們使用。這個飯卡十分的神奇,如果購買乙個商品之前,卡上的剩餘金...