1. 程式人生 > >HDU 2546 飯卡……(01揹包+條件)

HDU 2546 飯卡……(01揹包+條件)

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
    int i, j, temp, v[1005], n, m, dp[1005];
    while(~scanf("%d", &n), n)
    {
        memset(dp, 0, sizeof(dp));
        for(i=0;i<n;i++)
            scanf("%d", &v[i]);
        sort(v, v+n);
        scanf("%d", &m);
        if(m<5)
        {
            printf("%d\n", m);
            continue ;
        }
        m-=5;
        for(i=0;i<n-1;i++)
            for(j=m;j>=v[i];j--)
                dp[j]=max(dp[j], dp[j-v[i]]+v[i]);
        printf("%d\n", m+5-dp[m]-v[n-1]);
    }
    return 0;
}