Pagini recente » Cod sursa (job #2625286) | Cod sursa (job #1953264) | Cod sursa (job #2222266) | Cod sursa (job #1224385) | Cod sursa (job #1556832)
#include <cstdio>
#include <algorithm>
using namespace std;
const int nmax = 17;
int n, g;
int z[nmax];
int d[(1<<nmax)];
long long s[(1<<nmax)];
inline int msb(int x) {
return x ^ (x & (x - 1));
}
int main() {
freopen("zebughil.in", "r", stdin);
freopen("zebughil.out", "w", stdout);
int T = 3;
while(T--) {
scanf("%d %d", &n, &g);
for (int i = 0; i < n; i++) {
scanf("%d", &z[i]);
s[(1<<i)] = z[i];
}
for (int m = 0; m < (1<<n); m++) {
d[m] = n+1;
if (m == 0)
continue;
if ((m ^ msb(m)) == 0)
continue;
s[m] = s[m ^ msb(m)] + s[msb(m)];
}
for (int m = 0; m < (1<<n); m++) {
if (s[m] <= 1LL * g) {
d[m] = 1;
continue;
}
for (int m1 = m; m1 > 0; m1 = (m1 - 1) & m) {
d[m] = min(d[m], d[m1] + d[m1 ^ m]);
}
}
printf("%d\n", d[(1<<n)-1]);
}
return 0;
}