Pagini recente » Cod sursa (job #1777899) | Cod sursa (job #2607773) | Cod sursa (job #1523606) | Cod sursa (job #1054094) | Cod sursa (job #3174517)
#include <fstream>
using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
const int DIM = 140000;
struct punct {
int nr, g;
} dp[DIM];
int v[18];
int n, gMax, st, ant, bit;
int main() {
dp[0].nr = 1, dp[0].g = 0;
for (int t = 1; t <= 3; t++) {
fin >> n >> gMax;
for (int i = 1; i <= n; i++)
fin >> v[i];
for (int i = 1; i < (1 << n); i++) {
dp[i].nr = n + 1;
dp[i].g = 0;
}
for (st = 1; st < (1 << n); st++) {
for (bit = 0; bit < n; bit++) {
if (((st >> bit) & 1) == 1) {
ant = st - (1 << bit);
if (dp[ant].nr != n + 1) {
if (dp[ant].g + 1LL * v[bit + 1] <= gMax) {
if (dp[st].nr > dp[ant].nr || dp[st].nr == dp[ant].nr && dp[st].g > dp[ant].g + v[bit + 1]) {
dp[st].nr = dp[ant].nr;
dp[st].g = dp[ant].g + v[bit + 1];
}
} else {
if (dp[st].nr > dp[ant].nr + 1 || dp[st].nr == dp[ant].nr + 1 && dp[st].g > v[bit + 1]) {
dp[st].nr = dp[ant].nr + 1;
dp[st].g = v[bit + 1];
}
}
}
}
}
}
fout << dp[(1 << n) - 1].nr << '\n';
}
return 0;
}