Pagini recente » Cod sursa (job #489024) | Cod sursa (job #541290) | Cod sursa (job #1912079) | Cod sursa (job #1574349) | Cod sursa (job #1865766)
#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];
int64_t 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];
memset(DP, inf, sizeof DP);
DP[0] = 0;
sum[0] = 0;
for (i = 1; i < (1 << N); ++i)
sum[i] = sum[i & (i - 1)] + Z[i ^ (i & (i - 1))];
for (i = 1; i < (1 << N); ++i) {
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;
}