Cod sursa(job #42949)

Utilizator marinaMarina Horlescu marina Data 29 martie 2007 17:39:54
Problema Zebughil Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
//Zebughil - infoarena
#include <stdio.h>
#define INPUT "zebughil.in"
#define OUTPUT "zebughil.out"
#define CONST 3
#define MAXN 18
#define MAX 1<<18

int N, G;
int v[MAXN];
int best[MAX];

int rezolv()
{
	int i, j, k;
	for(j = 1; j < (1<<N); ++j) best[j] = -1;
	best[0] = G;
	for(i = 1; i <= N; ++i)
	{
		for(j = 1; j < (1<<N); ++j)
		{
			if(best[j] != -1) best[j] += G;
			for(k = 0; (1<<k) <= j; ++k)
				if((j & (1<<k)) && best[j & ~(1<<k)] - v[k+1] > best[j])
					best[j] = best[j & ~(1<<k)] - v[k+1];
			
		}
		if(best[(1<<N) -1] >= 0) return i;
	}
//	printf("error");
}
void citire()
{
	scanf("%d %d", &N, &G);
	int i;
	for(i = 1; i <= N; ++i)
		scanf("%d", &v[i]);
}
int main()
{
	freopen(INPUT, "r", stdin);
	freopen(OUTPUT, "w", stdout);
	int i;
	for(i = 1; i <= CONST; ++i)
	{
		citire();
		printf("%d\n", rezolv());
	}
	return 0;
}