訓練之DP 寒冰王座

2021-07-15 10:04:51 字數 1440 閱讀 6851

寒冰王座

crawling in process...

crawling failed

time limit:1000msmemory limit:32768kb64bit io format:%i64d & %i64u

submit

status

description

不死族的巫妖王發工資拉,死亡騎士拿到一張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

一道簡單的完全揹包問題,當然貪心也可以解決。目的是花掉錢的最大值且不能超過。

#includeint dp[10010];//揹包

int max(int a,int b)

int main();//花費既是體積也是價值,且350的被150和200的代替了

scanf("%d",&n);

for(int i=0;i<=n;i++) dp[i]=0;//揹包初始化

for(int i=0;i<2;i++)

for(int j=c[i];j<=n;j++)

dp[j]=max(dp[j],dp[j-c[i]]+c[i]);//選擇不斷裝入

printf("%d\n",n-dp[n]);//小費=付出的錢-花掉最多的錢

}return 0;

}

寒冰王座(dp) 完全揹包

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

hdu 寒冰王座

一開始是知道是完全揹包問題的,但是不會完全揹包,也不能叫全不會,只是理解了一點,還差一點就會了 剛開始寫的時候按照f i j max f i 1 j f i 1 j k weight i k weight i 到後來才知道是直接求裡面最大的f i j max f i 1 j k weight i k...

完全揹包 寒冰王座

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