Cod sursa(job #1865766)

Utilizator RazvanR104Razvan-Andrei Ciocoiu RazvanR104 Data 2 februarie 2017 01:27:11
Problema Zebughil Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 17;
const int inf = 0x3f3f3f3f;

int N, G;
int Z[1 << NMAX], DP[1 << NMAX];
int64_t sum[1 << NMAX];

int main() {
	assert(freopen("zebughil.in", "r", stdin));
	assert(freopen("zebughil.out", "w", stdout));

	int i, j;

	while (cin >> N) {
		cin >> G;
		for (i = 0; i < N; ++i)
			cin >> Z[1 << i];
		memset(DP, inf, sizeof DP);
		DP[0] = 0;
		sum[0] = 0;
		for (i = 1; i < (1 << N); ++i)
			sum[i] = sum[i & (i - 1)] + Z[i ^ (i & (i - 1))];
		for (i = 1; i < (1 << N); ++i) {
			for (j = i & (i - 1); ; j = i & (j - 1)) {
				int diff = i ^ j;
				if (sum[diff] <= G)
					DP[i] = min(DP[i], DP[j] + 1);
				if (j == 0)
					break;
			}
		}
		cout << DP[(1 << N) - 1] << '\n';
	}

	return 0;
}