Cod sursa(job #475352)

Utilizator perticas_catalinperticas catalin perticas_catalin Data 6 august 2010 19:09:35
Problema Zebughil Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <string>

using namespace std;

#define NM 20
#define NM2 132000
#define inf 2000000000

int TMIN[NM2];

int main()
{
	freopen ("zebughil.in", "r", stdin);
	freopen ("zebughil.out", "w", stdout);
	
	int Q = 3, N, G, Z[NM], L[NM];
	
	while (Q--)
	{
		scanf ("%d %d\n", &N, &G);
		
		for (int i = 1; i <= N; ++i) scanf ("%d ", &Z[i]);
		
		TMIN[0] = 0;
		
		for (int conf = 1; conf < (1<<N); ++conf)
		{
			int cate = 0;
			
			for (int i = 1; i <= N; ++i)
				if ((1<<(i-1)) & conf) L[++cate] = i;
			
			int best = inf;
			
			for (int conf2 = 1; conf2 < (1<<cate); ++conf2)
			{
				int confb = 0, zz = 0;
				
				for (int i = 1; i <= cate; ++i)
					if ((1<<(i-1)) & conf2) 
					{	
						confb += (1<<(L[i]-1));
						zz += Z[L[i]];
					}	
					
				if (zz <= G) best = min(best, TMIN[conf - confb] + 1);	
			}
			
			TMIN[conf] = best;	
		}

		printf ("%d\n", TMIN[(1<<N)-1]);	
	}	
	
	return 0;
}