#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <algorithm>
#include <stack>
#include <math.h>
#include<iostream>
#include <map>
using namespace std;
#define INF 0xfffff;//0x代表十六进制
#define M 1050
int a[M],dp[M];
int main()
{
int n, m;
while (cin >> n,n)
{
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= n; i++) cin >> a[i];
cin >> m;
sort(a+1, a + n+1);
if (m >= 5)
{
m -= 5;
for (int i = n - 1; i >= 1; i--)
for (int j = m; j >= a[i]; j--) dp[j] = max(dp[j], dp[j - a[i]] + a[i]);
cout << m - dp[m]+5- a[n] << endl; //5块买最贵的 剩下的买剩下的
}
else cout << m << endl;
}
return 0;
}
HDOJ2546
最新推荐文章于 2020-04-28 12:32:33 发布