hdu 2546 饭卡 动态规划 01背包

来源:互联网 发布:淘宝好看的男鞋店铺 编辑:程序博客网 时间:2024/06/08 15:08
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int dp[1010];
int a[1010];
int main()
{
    int n,i,j,m;
    while(cin>>n&&n){
        memset(dp,0,sizeof(dp));
        memset(a,0,sizeof(a));
        for(int i=0;i<n;i++)
            cin>>a[i];
        cin>>m;
        if(m<5) {
            cout<<m<<endl;
            continue;
        }
        sort(a,a+n);
        int maxn=a[n-1];
        m-=5;
        if(m>=a[0]){
            for(int i=0;i<n-1;++i){
                for(j=m;j>=a[i];--j){
                    dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
                }
            }
        }
        cout<<m+5-dp[m]-maxn<<endl;
    }
    return 0;
}