Cod sursa(job #2439127)

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

using namespace std;

typedef long long ll;

int Power_3(int n) {
	int ret = 1;
	for (int i = 0; i < n; ++i, ret *= 3);
	return ret;
}

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

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

		vector < ll > cost(n);
		for (int i = 0; i < n; ++i) {
			cin >> cost[i];
		}

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

		for (int i = 0; i < lim_3; ++i) {
			ll sum = 0;
			int maskQuerry = 0;
			int maskUpdate = 0;
			for (int j = 0, main_3 = i, bit = 1; j < n; ++j, bit *= 2) {
				int rem = main_3 % 3;
				main_3 /= 3;

				if (rem == 1) {
					sum += cost[j];
					if (sum > g) {
						break;
					}
				} else if (rem == 2) {
					maskQuerry += bit;
				}
				if (rem > 0) {
					maskUpdate += bit;
				}
			}

			if (sum <= g) {
				DP[maskUpdate] = min(DP[maskUpdate], DP[maskQuerry] + 1);
			}
		}

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