Cod sursa(job #480254)

Utilizator tamas_iuliaTamas Iulia tamas_iulia Data 27 august 2010 10:52:23
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>
#define Nmax 18

int din[1<<Nmax][Nmax];
int v[Nmax];
int n,G;

inline int Maxim(int x,int y){ return x>y ? x:y; }

int main(){
	int i,j,k,t;
	freopen("zebughil.in","r",stdin);
	freopen("zebughil.out","w",stdout);
	for(t=1;t<=3;++t){
		scanf("%d%d",&n,&G);
		for(i=1;i<=n;++i) scanf("%d",&v[i]);
		for(i=0;i<(1<<n);++i)
			for(j=1;j<=n;++j) din[i][j]=-1;
		din[0][1]=G;
			
		for(i=0; i<(1<<n); ++i)
			for(j=1;j<=n;++j)
				if( din[i][j] != -1 )
					for(k=0;k<n;++k)
						if( !(i&(1<<k)) )
							if( din[i][j]-v[k+1]>=0 ) 
								din[i|(1<<k)][j]=Maxim(din[i|(1<<k)][j],din[i][j]-v[k+1]);
							else din[i|(1<<k)][j+1]=Maxim(din[i|(1<<k)][j+1],G-v[k+1]);
							
		for(j=1;j<=n;++j)
			if( din[(1<<n)-1][j]!=-1 ) break;
		printf("%d\n",j);
	}
	
	fclose(stdin); fclose(stdout);
	return 0;
}