Cod sursa(job #385548)

Utilizator ProtomanAndrei Purice Protoman Data 22 ianuarie 2010 22:20:28
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <algorithm>
#include <stdio.h>

using namespace std;

int n, g;
int a[1 << 17][17];
int vctCt[18];

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

	for (int testCases = 3; testCases; testCases--)
	{
		int gs = 1;
		scanf("%d %d", &n, &g);

		for (int i = 0; i < n; i++)
			scanf("%d", &vctCt[i]);

		for (int i = 0; i < (1 << n); i++)
			for (int j = 0; j < n; j++)
				a[i][j] = -1;
		a[0][0] = g;

		for (int i = 0; i < (1 << n); i++)
			for (int j = 0; j < n - 1; j++)
				for (int k = 0; k < n; k++)
					if (!(i & (1 << k)) && a[i][j] != -1)
						if (a[i][j] >= vctCt[k])
							a[i | (1 << k)][j] = max(a[i | (1 << k)][j], a[i][j] - vctCt[k]);
						else a[i | (1 << k)][j + 1] = max(a[i | (1 << k)][j + 1], g - vctCt[k]);

		for (int i = 0; i < n && gs; i++)
			if (a[(1 << n) - 1][i] != -1)
			{
				printf("%d\n", i + 1);

				gs = 0;
			}
		if (gs)
			printf("%d\n", 1);
	}

	fclose(stdin);
	fclose(stdout);
	return 0;
}