Cod sursa(job #314990)

Utilizator Mishu91Andrei Misarca Mishu91 Data 13 mai 2009 22:45:29
Problema Zebughil Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>

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

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

void solve()
{
	scanf("%d %d",&N, &G);
	
	for(int i = 0; i < N; ++i)
		scanf("%lld",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();
#ifdef _HOME_
		break;
#endif
	}
}