a飯卡:
電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買乙個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功(即使購買後卡上餘額為負),否則無法購買(即使金額足夠)。所以大家都希望盡量使卡上的餘額最少。
某天,食堂中有n種菜**,每種菜可購買一次。已知每種菜的**以及卡上的餘額,問最少可使卡上的餘額為多少。
input
多組資料。對於每組資料:
第一行為正整數n,表示菜的數量。n<=1000。
第二行包括n個正整數,表示每種菜的**。**不超過50。
第三行包括乙個正整數m,表示卡上的餘額。m<=1000。
n=0表示資料結束。
output
對於每組輸入,輸出一行,包含乙個整數,表示卡上可能的最小餘額。
sample input
1505101 2 3 2 1 1 2 3 2 1
500
sample output
-4532
嗯剛開始的時候把就是想暴力過去嗯。。。。雖然學長已經提了是揹包但是我還是想自己暴力一次看看
後來 吧給自己設計乙個組資料是 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排序,將便宜的菜買了,...