HDU 2546 飯卡(0 1揹包)

2021-08-01 00:20:25 字數 714 閱讀 5207

這仍然是乙個 0-1揹包 的問題 和上一題 2602 類似。思路是:在飯卡的餘額大於等於5時 我們可以買下任意價值的菜 所以我們只需要 在飯卡的餘額小於五之前買下價值盡可能多的菜 然後 再買下價值最大的菜即可

ac**:

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

int max(int a,int b)

int dp[1005][1005];

int main (){

int n;

int v;

int num[1005];

while (scanf("%d",&n)&&n)

{ for (int i=1;i<=n;i++)

scanf ("%d",&num[i]);

scanf ("%d",&v);//飯卡的金額

memset(dp,0,sizeof(dp));

if (v<5)//如果飯卡的金額小於5 不能買

printf ("%d\n",v);

else//大於等於5可以買

{ qsort(num+1,n,sizeof(num[0]),cmp); //公升序排列 留下最大的乙個

// 找出在 v-5 的餘額下能買到的菜的最大價值

for (int i=1;i

HDU2546 飯卡 01揹包

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

HDU 2546 飯卡 01揹包

我的做法是找出n種菜中最貴的 k,把揹包的容量m增加的到m k 然後對 排個序,因為dp是從第乙個菜到最後乙個菜,越貴的菜越後選結果越小,然後進行dp include include include include using namespace std const int maxn 1010 in...

hdu2546飯卡 01揹包

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