不死族的巫妖王發工資拉,死亡騎士拿到一張n元的鈔票(記住,只有一張鈔票),為了防止自己在戰鬥中頻繁的死掉,他決定給自己買一些道具,於是他來到了地精商店前.
死亡騎士:」我要買道具!」
地精商人:」我們這裡有三種道具,血瓶150塊乙個,魔法藥200塊乙個,無敵藥水350塊乙個.」
死亡騎士:」好的,給我乙個血瓶.」
說完他掏出那張n元的大鈔遞給地精商人.
地精商人:」我忘了提醒你了,我們這裡沒有找客人錢的習慣的,多的錢我們都當小費收了的,嘿嘿.」
死亡騎士:」……」
死亡騎士想,與其把錢當小費送個他還不如自己多買一點道具,反正以後都要買的,早點買了放在家裡也好,但是要盡量少讓他賺小費.
現在死亡騎士希望你能幫他計算一下,最少他要給地精商人多少小費.
輸入資料的第一行是乙個整數t(1<=t<=100),代表測試資料的數量.然後是t行測試資料,每個測試資料只包含乙個正整數n(1<=n<=10000),n代表死亡騎士手中鈔票的面值.
注意:地精商店只有題中描述的三種道具.
對於每組測試資料,請你輸出死亡騎士最少要浪費多少錢給地精商人作為小費.
2 900
2500
50標準方法揹包問題,使用動態方程組f[i][v]=max(f[i-1][v],f[i-1][v-k*c[i]]+k*w[i]]可以直接解出,沒什麼難度
有點類似於初中幾何的就近問題,150和200的差值為50,且f[n]=150*i+200*j=150*(i+j)+50*j (i>=0,j>=0)所以除了50,100,250三個點以外,50的倍數均可以被覆蓋到,通過if篩選判斷之後,直接求50的餘數即可
#includeint main()
return 0;
}
方法三
相當於二者之間的結合,直接對150和200進行遍歷取餘,求取最小差值
#includeint main()
else
//printf("n=%d n%200=%d\n",n,n%200);
if(temp%200min=temp%200;}}
printf("%d\n",min);
}return 0;
}
HDU 1248 寒冰王座
description 不死族的巫妖王發工資拉,死亡騎士拿到一張n元的鈔票 記住,只有一張鈔票 為了防止自己在戰鬥中頻繁的死掉,他決定給自己買一些道具,於是他來到了地精商店前.死亡騎士 我要買道具 地精商人 我們這裡有三種道具,血瓶150塊乙個,魔法藥200塊乙個,無敵藥水350塊乙個.死亡騎士 好...
HDU1248 寒冰王座 母函式
不死族的巫妖王發工資拉,死亡騎士拿到一張n元的鈔票 記住,只有一張鈔票 為了防止自己在戰鬥中頻繁的死掉,他決定給自己買一些道具,於是他來到了地精商店前.死亡騎士 我要買道具 地精商人 我們這裡有三種道具,血瓶150塊乙個,魔法藥200塊乙個,無敵藥水350塊乙個.死亡騎士 好的,給我乙個血瓶.說完他...
HDU 1248 寒冰王座 (揹包)
problem description 不死族的巫妖王發工資拉,死亡騎士拿到一張n元的鈔票 記住,只有一張鈔票 為了防止自己在戰鬥中頻繁的死掉,他決定給自己買一些道具,於是他來到了地精商店前.死亡騎士 我要買道具 地精商人 我們這裡有三種道具,血瓶150塊乙個,魔法藥200塊乙個,無敵藥水350塊乙...