Pagini recente » Cod sursa (job #1803303) | Cod sursa (job #2294354) | Cod sursa (job #2697558) | Cod sursa (job #2215177) | Cod sursa (job #1467442)
#include <bits/stdc++.h>
#define pb push_back
#define f first
#define s second
#define pii pair<int, int>
#define mp make_pair
using namespace std;
const string name = "zebughil",
in_file = name + ".in",
out_file = name + ".out";
ifstream fin(in_file);
ofstream fout(out_file);
const int MAX = 131072, NMAX = 18, oo = 2 * (1e9) + 1;
int n, g, v[NMAX], dp[MAX], free_space[MAX];
int main() {
for (int t = 3; t; t--) {
fin >> n >> g;
for (int i = 0; i < n; i++)
fin >> v[i];
memset(free_space, 0, sizeof(free_space));
for (int i = 1; i < MAX; i++)
dp[i] = oo;
dp[0] = 0;
int max_mask = (1 << n) - 1;
for (int mask = 0; mask < max_mask; mask++) {
for (int i = 0; i < n; i++)
if (!((1 << i) & mask)){
int newmask = (1 << i) + mask,
new_cnt = (free_space[mask] < v[i] ? dp[mask] + 1: dp[mask]),
new_free = (free_space[mask] < v[i] ? g - v[i]: free_space[mask] - v[i]);
if (new_cnt < dp[newmask]){
dp[newmask] = new_cnt;
free_space[newmask] = new_free;
}else if (new_cnt == dp[newmask])
free_space[newmask] = max(free_space[newmask], new_free);
}
}
fout << dp[max_mask] << '\n';
}
return 0;
}