Pagini recente » Cod sursa (job #330267) | Cod sursa (job #1859787) | Cod sursa (job #3134475) | Cod sursa (job #2170062) | Cod sursa (job #677187)
Cod sursa(job #677187)
#include <cstdio>
using namespace std;
#define MAXN 18
FILE* fin = fopen("zebughil.in", "r");
FILE* fout = fopen("zebughil.out", "w");
int n, g, w[MAXN], d[1 << MAXN][MAXN];
template <typename T> T max(T a, T b)
{
return a > b ? a : b;
}
int solve()
{
for (int i = 0; i < (1 << n); ++i) {
for (int j = 0; j < n; ++j) {
d[i][j] = -1;
}
}
d[0][0] = g;
for (int i = 0; i < (1 << n); ++i) {
for (int j = 0; j < n; ++j) {
for (int k = 0; k < n; ++k) {
if (i & (1 << k) || d[i][j] == -1) {
continue;
}
if (d[i][j] >= w[k]) {
d[i | (1 << k)][j] = max(d[i | (1 << k)][j], d[i][j] - w[k]);
} else {
d[i | (1 << k)][j + 1] = max(d[i | (1 << k)][j], g - w[k]);
}
}
}
}
for (int i = 0; i < n; ++i) {
if (d[(1 << n) - 1][i] != -1) {
return i + 1;
}
}
return 1;
}
int main()
{
for (int i = 0; i < 3; ++i) {
fscanf(fin, "%d %d\n", &n, &g);
for (int i = 0; i < n; ++i) {
fscanf(fin, "%d", &w[i]);
}
fprintf(fout, "%d\n", solve());
}
fclose(fin);
fclose(fout);
return 0;
}