HDU 2546 01背包问题

Posted 不离别不相遇、

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 2546 01背包问题相关的知识,希望对你有一定的参考价值。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int qq=1000+10;
int price[qq<<1],dp[qq<<1];
int main()
{
    int n;
    while(~scanf("%d",&n)&&n){
        memset(price,0,sizeof(price));    //初始化 
        memset(dp,0,sizeof(price));
        for(int i=0;i<n;++i)
            scanf("%d",&price[i]);
        sort(price,price+n);
        int money;scanf("%d",&money);
        if(money<5){
            printf("%d\n",money);
            continue;
        }
        money=money-5;        //取出5元用于购买最贵的物品、
        for(int j,i=0;i<n-1;++i)
            for(j=money;j>=price[i];--j)
                dp[j]=max(dp[j],dp[j-price[i]]+price[i]);    //物品只有买或者不买两种选择
        printf("%d\n",money+5-dp[money]-price[n-1]);
    }
    return 0;
} 

 

以上是关于HDU 2546 01背包问题的主要内容,如果未能解决你的问题,请参考以下文章

HDU 2546 01背包问题

hdu2546 01背包

hdu2546 饭卡 01-背包问题

HDU 2546 饭卡(01背包)

(01背包 排序+特判)饭卡(hdu 2546)

HDU2546(01背包)