HDU246飯卡(01揹包 動態規劃)

2022-03-21 20:58:26 字數 1352 閱讀 6450

動態規劃的題總是 看完別人的**自己理解著打,今天自己終於自己打一回,遇到了一點問題,不過解決後發現現在理解更透徹了。

problem description

電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買乙個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功(即使購買後卡上餘額為負),否則無法購買(即使金額足夠)。所以大家都希望盡量使卡上的餘額最少。

某天,食堂中有n種菜**,每種菜可購買一次。已知每種菜的**以及卡上的餘額,問最少可使卡上的餘額為多少。

input

多組資料。對於每組資料:

第一行為正整數n,表示菜的數量。n<=1000。

第二行包括n個正整數,表示每種菜的**。**不超過50。

第三行包括乙個正整數m,表示卡上的餘額。m<=1000。

n=0表示資料結束。

output

對於每組輸入,輸出一行,包含乙個整數,表示卡上可能的最小餘額。

sample input150

5101 2 3 2 1 1 2 3 2 1500

sample output

-4532

開始時我用的是先從小到大迴圈temp,內部從小到大迴圈cost,發現不僅會重複放置還思路解釋不清,後來改為先迴圈cost再從小到大迴圈temp,發現會重複放置,就是每次放置是本應改是再上乙個放置基礎上各個獨立的,可這樣就會造成再放物體5時,用到了dp[i-cost[5]]但此時的dp[i-cost[5]]由於是從小到大迴圈,在經過dp[i-cost[5]]時已經被dp[i-cost[5]]改變了(此時的i為dp[i-cost[5]]),哎~ 怎麼解釋也解釋不清啊,才明白寫揹包九講的大牛是有多厲害,曾經喜歡vn那個後期adc的「木已成舟」,事已至此又能怎樣,反正過去的也改變不了,只好努力。

/*啊啊啊啊啊啊啊啊啊,打完這些才明白這道題是有多簡單,我是有多腦殘啊啊啊啊啊啊啊*/(說點沒用的啊,學校訓練賽已經開始了,而我還在寫這道題,無語了)

1

/*01揹包hdu2546

*/2 #include3 #include4 #include

5using

namespace

std;

6int cost[1010];7

int dp[1010];8

intmain()922

int temp=money-5

;23 memset(dp,0,sizeof

(dp));

24for(int i=0; i1; i++)

25for(int j=temp; j>=1; j--)

26if(cost[i]<=j)

2731 cout<1]<33 }

hdu2546飯卡(動規 01揹包)

problem description 電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買乙個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功 即使購買後卡上餘額為負 否則無法購買 即使金額足夠 所以大家都希望盡量使卡上的餘額最少。某天,食堂中有n種菜 每種菜可購買一...

A 飯卡(動態規劃 01揹包)

a飯卡 電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買乙個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功 即使購買後卡上餘額為負 否則無法購買 即使金額足夠 所以大家都希望盡量使卡上的餘額最少。某天,食堂中有n種菜 每種菜可購買一次。已知每種菜的 以及卡上的餘額...

HDU 2546 飯卡 (動態規劃01揹包)

先用5元錢買最貴的東西,然後用剩下的錢買價值最大的東西,也就是01揹包問題。先進行排序,找出最大的,然後對剩下的商品進行動態規劃,而順序不影響。參考部落格 include include include include include include define eps 1e 8 using na...