Pagini recente » Cod sursa (job #1033755) | Cod sursa (job #2191956) | Cod sursa (job #428921) | Cod sursa (job #593974) | Cod sursa (job #2021722)
#include <bits/stdc++.h>
using namespace std;
int const N = 17;
int n, g, v[N], minsplit[1 << N], minLast[1 << N];
void upd(int conf, int cursplit, int curlast) {
if(cursplit < minsplit[conf]) {
minsplit[conf] = cursplit;
minLast[conf] = curlast;
} else if(cursplit == minsplit[conf])minLast[conf] = min(minLast[conf], curlast);
}
int main() {
ifstream cin("zebughil.in");
ofstream cout("zebughil.out");
for(int tc = 0; tc < 3; ++ tc) {
cin >> n >> g;
for(int i = 0; i < n; ++i )
cin >> v[i];
for(int c = 1; c < 1 << n; ++c) {
minsplit[c] = __builtin_popcount(c);
minLast[c] = g + 1;
}
minsplit[0] = 1, minLast[0] = 0;
for(int c = 0; c < 1 << n; ++c) {
for(int add = 0; add < n; ++add) {
if((c & (1 << add)) == 0) {
int nc = c | (1 << add);
if(minLast[c] + v[add] <= g) {
upd(nc, minsplit[c], minLast[c] + v[add]);
} else upd(nc, minsplit[c] + 1, v[add]);
}
}
}
cout << minsplit[(1 << n) - 1] << '\n';
}
return 0;
}