Pagini recente » Cod sursa (job #756417) | Cod sursa (job #594495) | Cod sursa (job #2743041) | Cod sursa (job #1818787) | Cod sursa (job #1834659)
#include <bits/stdc++.h>
using namespace std;
ifstream f("zebughil.in");
ofstream h("zebughil.out");
const int NMAX = 17;
int n, g;
int w[NMAX];
int s[1 << NMAX];
int d[1 << NMAX];
int lg[1 << NMAX];
int main() {
for (int i = 0; i < NMAX; i++) {
lg[1 << i] = i;
}
for (int t = 1; t <= 3; t++) {
f >> n >> g;
for (int i = 0; i < n; i++) {
f >> w[i];
}
s[0] = g;
d[0] = 1;
for (int i = 1; i < (1 << n); i++) {
int bst_n = n;
int bst_c = g;
d[i] = n + 1;
s[i] = 0;
for (int l = i; l > 0; l -= l & -l) {
int k = i ^ (l & -l);
int j = lg[l & -l];
if (w[j] <= s[k]) {
if (d[i] > d[k]) {
d[i] = d[k];
s[i] = s[k] - w[j];
}
else {
if (d[i] == d[k] && s[i] < s[k] - w[j]) {
s[i] = s[k] - w[j];
}
}
}
else {
if (bst_n > d[k] + 1) {
bst_n = d[k] + 1;
bst_c = g - w[j];
}
else {
if (bst_n == d[k] + 1 && bst_c < g - w[j]) {
bst_c = g - w[j];
}
}
}
}
if (d[i] == n + 1) {
d[i] = bst_n;
s[i] = bst_c;
}
}
h << d[(1 << n) - 1] << "\n";
}
return 0;
}