Pagini recente » Cod sursa (job #2127713) | Cod sursa (job #456275) | Cod sursa (job #2462722) | Cod sursa (job #2547330) | Cod sursa (job #1989278)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 17;
const int inf = 0x3f3f3f3f;
int N, G;
int Z[1 << NMAX], DP[1 << NMAX];
unsigned int sum[1 << NMAX];
int main() {
assert(freopen("zebughil.in", "r", stdin));
assert(freopen("zebughil.out", "w", stdout));
int i, j;
while (cin >> N) {
cin >> G;
for (i = 0; i < N; ++i)
cin >> Z[1 << i];
DP[0] = 0;
sum[0] = 0;
for (i = 1; i < (1 << N); ++i) {
sum[i] = sum[i & (i - 1)] + Z[i ^ (i & (i - 1))];
if (sum[i] > G)
sum[i] = G + 1;
}
for (i = 1; i < (1 << N); ++i) {
DP[i] = inf;
for (j = i & (i - 1); ; j = i & (j - 1)) {
int diff = i ^ j;
if (sum[diff] <= G)
DP[i] = min(DP[i], DP[j] + 1);
if (j == 0)
break;
}
}
cout << DP[(1 << N) - 1] << '\n';
}
return 0;
}