Cod sursa(job #397058)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 16 februarie 2010 12:19:29
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include<stdio.h>
int n,g,v[20];
int d[20][132000];

inline int max(int a, int b){return a>b?a:b;}

int main()
{
	freopen("zebughil.in","r",stdin);
	freopen("zebughil.out","w",stdout);
	int i,j,k,cj,t=3,lim;
	while(t--)
	{
		for(i=0;i<=19;i++)
			for(j=0;j<=131900;j++)
				d[i][j]=-1;
		scanf("%d%d",&n,&g);
		for(i=1;i<=n;i++)
			scanf("%d",&v[i]);
		lim=(1<<n)-1;
		d[0][0]=0;
		for(i=0;i<=n;i++)
			for(j=0;j<=lim;j++)
			{
				if(d[i][j]==-1)
					continue;
				for(k=0;k<n;k++)
					if(!(j&(1<<k)))
					{
						cj=j^(1<<k);
						d[i+1][cj]=max(d[i+1][cj],g-v[k+1]);
						d[i][cj]=max(d[i][cj],d[i][j]-v[k+1]);
					}
			}
		for(i=1;i<=n;i++)
			if(d[i][lim]!=-1)
				break;
		printf("%d\n",i);
	}
	return 0;
}