Cod sursa(job #2439129)

Utilizator eu3neuomManghiuc Teodor-Florin eu3neuom Data 15 iulie 2019 01:37:26
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

ll n, g;
vector < ll > cost;
void Back(int lvl, int pwr_2, int maskQuerry, int maskUpdate, vector < int > &DP, ll sum) {
	if (lvl == n) {
		DP[maskUpdate] = min(DP[maskUpdate], DP[maskQuerry] + 1);
	} else {
		// 0
		Back(lvl + 1, pwr_2 / 2, maskQuerry, maskUpdate, DP, sum);

		// 1
		if ((sum + cost[lvl]) <= g) {
			Back(lvl + 1, pwr_2 / 2, maskQuerry, maskUpdate + pwr_2, DP, sum + cost[lvl]);
		}

		// 2
		Back(lvl + 1, pwr_2 / 2, maskQuerry + pwr_2, maskUpdate + pwr_2, DP, sum);
	}
}

int main() {
	ifstream cin("zebughil.in");
	ofstream cout("zebughil.out");

	for (int test = 0; test < 3; ++test) {
		cin >> n >> g;

		cost.assign(n, 0);
		for (int i = 0; i < n; ++i) {
			cin >> cost[i];
		}

		const int lim_2 = 1 << n;
		vector < int > DP(lim_2, n);
		DP[0] = 0;

		Back(0, lim_2 / 2, 0, 0, DP, 0);

		cout << DP[(1 << n) - 1] << endl;
	}
	return 0;
}