hdu 2546 飯卡(揹包)

2021-12-29 22:20:46 字數 922 閱讀 5471

設飯卡餘額為total

此題經分析 可以得出:要求選出一些飯菜 時消費量盡量接近total-5元 然後再買乙個飯菜 以達到透支。。。

可以證明 最後買的那個飯菜是飯菜中價值最大的.

證明設a1 a2 a3...an-1 an 為各飯菜的**  設an的**最大

設sum=total-5

a1+a2+a3+...an-2+an-1+an=m

a1+a2+a3+...+an-2+an-1=x1          最後加an (按5元為界限)此時超額(an-1)-(sum-x1)=an-sum+a1+a2+...+an-2+an-1元                1

a1+a2+a3+...+an-2+an=x2             最後加an-1(按5元為界限)此時超額(an)-(sum-x2)=(an-1)-sum+a1+a2+...+an-2+an元              2

1式-2式=2*((an)-(an-1))>0

所以1式超額更多

所以最後選**最大的那個飯菜得證

此題注意一點: 如果餘額total本身就少於5元  直接輸出total     此時沒法買東西了  這種特殊情況要判斷

動態規劃

01揹包問題 揹包總量為餘額-5  每個揹包價值和重量都為w

#include

#include

#include

#define max(a,b) a>b?a:b

int cmp(const void *a,const void *b)

int main()

memset(bb,0,sizeof(bb));

m=m-5;

bb[0]=0;

for(i=0;i

}printf("%d\n",m+5-bb[m]-a[n-1]);

}return 0;

hdu2546 飯卡(揹包)

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

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...

DP 揹包 hdu2546 飯卡

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