思路:
題目的意思:如果購買乙個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功(即使購買後卡上餘額為負),否則無法購買(即使金額足夠)
如果要使卡上的剩餘金額最少,則假設最後剩下5元,肯定是買最貴的一種,則可以在卡最初的剩餘金額上欲留出5元,最後買最貴的,所以要事先排好序(菜的金額從小到大),然後卡上剩下的金額可以購買除最貴的菜的所有的菜,使其達到最大價值(通過0/1揹包求解)
ac**如下:
#include#include#includeint dp[1005],c[1005];
int v;
int cmp(const void *a,const void *b)
void zeroonepack(int c,int w)
{ int v;
for(v=v-5;v>=c;v--)
if(dp[v]
hdu2546 飯卡(揹包)
problem description 電子科大本部食堂的飯卡有一種很詭異的設計,即在購買之前判斷餘額。如果購買乙個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功 即使購買後卡上餘額為負 否則無法購買 即使金額足夠 所以大家都希望盡量使卡上的餘額最少。某天,食堂中有n種菜 每種菜可購買一...
hdu 2546 飯卡(揹包)
設飯卡餘額為total 此題經分析 可以得出 要求選出一些飯菜 時消費量盡量接近total 5元 然後再買乙個飯菜 以達到透支。可以證明 最後買的那個飯菜是飯菜中價值最大的.證明設a1 a2 a3.an 1 an 為各飯菜的 設an的 最大 設sum total 5 a1 a2 a3 an 2 an...
HDU2546 飯卡 揹包
開始寫成01揹包的形式,求m元可買物品價值的最大值 dp j max dp j dp j pri i pri i 結果為m dp m 但後來發現是有問題的,比如這組過不去 515 14 13 13 42 60正解應該m 5 0時買盡量多的物品,然後剩下的錢買價值最大的物品。1 include 2 i...