設飯卡餘額為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種菜 每種菜可購買一...