Cod sursa(job #2439104)

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

using namespace std;

typedef long long ll;

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

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

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

		const int lim = 1 << n;
		vector < ll > cost(lim);

		for (int j = 0; j < lim; ++j) {
			for (int k = 0, bit = 1; k < n; ++k, bit *= 2) {
				if (j & bit) {
					cost[j] += v[k];
				}
			}
		}

		int ans = 0;
		int used = (1 << n) - 1;
		while (used) {
			int mx = 0;
			int mxMsk = 0;
			for (int j = 0; j < lim; ++j) {
				int msk = used & j;
				if (cost[msk] <= g) {
					if (cost[msk] > mx) {
						mx = cost[msk];
						mxMsk = msk;
					}
				}
			}

			int tmp = (1 << n) - 1;
			mxMsk = mxMsk ^ tmp;
			used = used & mxMsk;
			++ans;
		}

		cout << ans << endl;
	}
	return 0;
}