01背包...
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define MAX 1005
int dp[MAX], c[MAX];
int n, v;
inline int max(int a, int b) {
return a > b ? a : b;
}
inline void zeroOnePack(int cost, int weight) {
for (int j = v; j >= cost; j--) {
dp[j] = max(dp[j], dp[j - cost] + weight);
}
}
int main() {
int i;
while (scanf("%d", &n) != EOF && n) {
memset(dp, 0, sizeof(dp));
for (i = 1; i <= n; i++) {
scanf("%d", &c[i]);
}
scanf("%d", &v);
// 这个函数建议去百度一下哦
nth_element(c + 1, c + n, c + n + 1);
if (v >= 5) {
v -= 5;
for (i = 1; i < n; i++) {
zeroOnePack(c[i], c[i]);
}
v = v - dp[v] - c[n] + 5;
printf("%d\n", v);
} else {
printf("%d\n", v);
}
}
return 0;
}