Cod sursa(job #314988)

Utilizator Mishu91Andrei Misarca Mishu91 Data 13 mai 2009 22:37:43
Problema Zebughil Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <cstdio>

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

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

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)
		{
			int act = i + (1 << j);
			int nr = 0;
			int cat = A[i] - V[j];
			
			if((A[i] - V[j]) < 0)
				++nr,
				cat = G - V[j];
			if(S[i] + nr == S[act])
			{
				if(cat > A[act])
					A[act] = cat;
			}
			else if(S[i] + nr < S[act])
				S[act] = S[i] + nr,
				A[act] = cat;
			//fprintf(stderr,"%d %d %d %d %d\n", S[i], S[act], act, nr, 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();
		//break;
	}
}