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

2021-08-06 04:44:18 字數 1190 閱讀 7785

a飯卡:

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

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

input

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

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

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

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

n=0表示資料結束。

output

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

sample input

1505

101 2 3 2 1 1 2 3 2 1

500

sample output

-45

32

嗯剛開始的時候把就是想暴力過去嗯。。。。雖然學長已經提了是揹包但是我還是想自己暴力一次看看  

後來 吧給自己設計乙個組資料是 4 17 18 19 30 41       真正答案是-25  我的是-24 嗯 問題在於我是用sort排序的

所以 確實不行 嗯那就01揹包吧 對於18而言可選擇還是不選擇?

所以其實就是從n個數中選m個使得他們的和盡可能的接近x  然後在用money-最大的那個菜錢-  cost[(money-5)] 也就是這些錢裡面菜有的最大的價值 這樣子就是對的是典型的揹包問題  在比較的時候 比較為  如果不放入這個菜和放入這個菜那個?價值大就選擇哪乙個 總的來說就是這樣子  覺得自己還沒有了解的透徹 

c++**如下

#include#include#include#includeusing namespace std;

#define maxn 1005

int disk[maxn];

int cost[maxn];

int main()

} printf("%d\n",money-disk[n]-cost[money-5]);

}

} return 0;

}

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

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

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

動態規劃的題總是 看完別人的 自己理解著打,今天自己終於自己打一回,遇到了一點問題,不過解決後發現現在理解更透徹了。problem description 電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買乙個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功 即使購買...

HDU 2546 飯卡 動態規劃01揹包

題意 給你一些飯菜的 和你飯卡的餘額,餘額大於等於5元時可以刷任何 的菜,算出你買了這些菜之後飯卡中最少的一組解 餘額可以為負 坑爹 這道題中,他的 也就是揹包中的容量,也是揹包中的價值,總餘額如果超出5元要將總餘額減去5元的錢盡量用掉。解法用到了一點貪心的思想,用乙個sort排序,將便宜的菜買了,...