Cod sursa(job #1865769)

Utilizator RazvanR104Razvan-Andrei Ciocoiu RazvanR104 Data 2 februarie 2017 01:31:12
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 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];
unsigned int 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];
		DP[0] = 0;
		sum[0] = 0;
		for (i = 1; i < (1 << N); ++i) {
			sum[i] = sum[i & (i - 1)] + Z[i ^ (i & (i - 1))];
			if (sum[i] > G)
				sum[i] = G + 1;
		}
		for (i = 1; i < (1 << N); ++i) {
			DP[i] = inf;
			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;
}