Cod sursa(job #2157909)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 9 martie 2018 23:48:31
Problema Zebughil Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;

ifstream fi("zebughil.in");
ofstream fo("zebughil.out");

using i64 = long long;
using pll = pair<i64, i64>;

const int N = 17;


pll dp[1 << N];

vector<i64> blocks;
int n, g;


static void solve() {
	fi >> n >> g;
	blocks.resize(n);
	for (auto &i: blocks)
		fi >> i;

	for (int i = 0; i < (1 << n); ++i)
		dp[i] = {20, 0};
	dp[0] = {1, 0};

	for (int msk = 0; msk < (1 << n); ++msk) {
		for (int add = 0; add < n; ++add) if (~msk & (1 << add)) {
			pll &now = dp[msk | (1 << add)];
			now = min(now, pll(dp[msk].x + (dp[msk].y + blocks[add]) / g, (dp[msk].y + blocks[add]) % g)); } }

	fo << dp[(1 << n) - 1].x - int(!dp[(1 << n) - 1].y) << endl; }


int main() {
	int tsk = 3;

	while (tsk--)
		solve();

	return 0; }