Pagini recente » Cod sursa (job #1238823) | Cod sursa (job #119891) | Cod sursa (job #2094188) | Cod sursa (job #1363201) | Cod sursa (job #1687916)
#include <algorithm>
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
const int MAX_N = 20;
const int INF = 1 << 30;
int N, G;
int z[MAX_N];
pair<int, int> d[1 << MAX_N];
int solve();
int main() {
for (int t = 0; t < 3; t += 1) {
fin >> N >> G;
for (int i = 0; i < N; i += 1) {
fin >> z[i];
}
for (int conf = 0; conf < (1 << N); conf += 1) {
d[conf] = make_pair(INF, 0);
}
d[0] = make_pair(1, G);
fout << solve() << '\n';
}
}
int solve() {
for (int conf = 0; conf < (1 << N); conf += 1) {
if (d[conf].first == INF) continue;
for (int i = 0; i < N; i += 1) {
if (conf & (1 << i)) continue;
int ni, nc, nv;
nc = conf ^ (1 << i);
ni = d[conf].first;
if (d[conf].second - z[i] < 0) {
ni += 1;
nv = G - z[i];
} else {
nv = d[conf].second - z[i];
}
if (ni < d[nc].first || (ni == d[conf].first && nv > d[nc].second)) {
d[nc] = make_pair(ni, nv);
}
}
}
return d[(1 << N) - 1].first;
}