Hdu 2546 饭卡(01背包)

来源:互联网 发布:淘宝folk老王是正品吗 编辑:程序博客网 时间:2024/06/01 09:04

题目地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=2546

思路:5元钱可以买任何东西,显然应该买最贵的物品。则剩下的m-5元钱构成01背包。

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int tmp=1000;const int maxn=4000+50;int n,m;int w[maxn],f[maxn];int main(){    while(scanf("%d",&n)==1&&n)    {        int maxx=0;        for(int i=1;i<=n;i++)        {            scanf("%d",&w[i]);            maxx=max(maxx,w[i]);        }        scanf("%d",&m);        if(m<5) {printf("%d\n",m);continue;}        sort(w+1,w+n+1);        memset(f,0,sizeof(f));        for(int i=1;i<=n-1;i++)        {            for(int j=m-5;j>=w[i];j--)               f[j]=max(f[j],f[j-w[i]]+w[i]);        }        printf("%d\n",m-f[m-5]-maxx);    }    return 0;}



0 0
原创粉丝点击