hdu2546 01背包

来源:互联网 发布:id 条数MySQL 编辑:程序博客网 时间:2024/05/16 19:29

题目链接:点击打开链接

把最大的减去就是01背包了;

#include <iostream>#include <cstring>#include<algorithm>using namespace std;const int maxn=1e3+10;int a[maxn],dp[maxn];int main(){    int m,i,j,n,k,v,Max,pos;    while(cin>>n&&n)    {        Max=-1;        for(i=1; i<=n; i++)            cin>>a[i];         sort(a+1,a+n+1);         Max=a[n];        cin>>v;        if(v<5)cout<<v<<endl;        else        {             int k=v-5;        memset(dp,0,sizeof(dp));        for(i=1; i<n; i++)            for(j=k; j>=a[i]; j--)            {              dp[j]=max(dp[j],dp[j-a[i]]+a[i]);            }    cout<<v-dp[k]-Max<<endl;        }    }    return 0;}


原创粉丝点击