Cod sursa(job #314997)

Utilizator Mishu91Andrei Misarca Mishu91 Data 13 mai 2009 23:17:15
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <cstdio>

#define MAX_N 20
#define MAX_M (1 << 17)

int N, G;
int S[MAX_M], A[MAX_M], V[MAX_N];

void solve()
{
	scanf("%d %d",&N, &G);
	
	for(int i = 0; i < N; ++i)
		scanf("%d",V+i);
	
	int M = (1 << N);
	for(int i = 1; i < M; ++i)
		S[i] = N+1;
	
	for(int i = 0; i < M; ++i)
		for(int j = 0; j < N; ++j)
		{
			if(i & (1 << j)) continue;
			int act = i + (1 << j), nr = S[i], cat = A[i] - V[j];
			
			if(cat < 0)
				++nr,
				cat = G - V[j];
			if(nr == S[act])
				if(cat > A[act])
					A[act] = cat;
			
			if(nr < S[act])
				S[act] = nr,
				A[act] = cat;
		}
	printf("%d\n",S[M-1]);
}

int main()
{
	freopen("zebughil.in","rt",stdin);
	freopen("zebughil.out","wt",stdout);
	
	for(int i = 1; i < 4; ++i)
		solve();
}