Pagini recente » Cod sursa (job #3002621) | Cod sursa (job #3144168) | Cod sursa (job #2229195) | Cod sursa (job #2577430) | Cod sursa (job #475833)
Cod sursa(job #475833)
#include <cstdio>
#include <algorithm>
#include <cstring>
#define maxN 18
using namespace std;
int N, G;
int z[maxN], sol;
int D[1 << 17][18];
int main() {
int i, j, k;
freopen("zebughil.in", "r", stdin);
freopen("zebughil.out", "w", stdout);
for (int tt = 1; tt <= 3; tt++) {
scanf("%d%d", &N, &G);
for (i = 1; i <= N; i++)
scanf("%d", &z[i]);
memset(D, -1, sizeof(D));
D[0][0] = 0;
for (i = 0; i < (1 << N); i++)
for (j = 0; j <= N; j++) if (D[i][j] >= 0) {
// fprintf(stderr, "%d %d -> %d\n", i, j, D[i][j]);
for (k = 1; k <= N; k++) {
if ((i & (1 << (k - 1))) == 0) {
if (D[i][j] >= z[k])
D[i | (1 << (k - 1))][j] = max(D[i | (1 << (k - 1))][j], D[i][j] - z[k]);
else {
D[i | (1 << (k - 1))][j + 1] = max(D[i | (1 << (k - 1))][j + 1], G - z[k]);
}
}
}
}
for (sol = 1; sol <= N; sol++)
if (D[(1 << N) - 1][sol] != -1)
break;
printf("%d\n", sol);
}
return 0;
}