Cod sursa(job #75883)

Utilizator MarcvsHdrMihai Leonte MarcvsHdr Data 6 august 2007 14:45:08
Problema Zebughil Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
# include <stdio.h>

const long int T=3;
long int nco,sol,cam[20],g,n,weight[20];

void gen(long int i, long int lf)
{
long int j;
for (j=1;j<=nco;j++)
	if (cam[j]+weight[i]<=g)
		{
		cam[j]+=weight[i];
		if (i+1<=lf) gen(i+1,lf);
		else if (sol>nco) sol=nco;
		cam[j]-=weight[i];
		}
nco++;
cam[nco]=weight[i];
if (i+1<=lf) gen(i+1,lf);
else if (sol>nco) sol=nco;
cam[nco]=0;
nco--;
}

void quick(long int li, long int lf)
{
long int i=li,j=lf,ii=0,jj=-1,auxi;
while (i<j)
	{
	if (weight[i]<weight[j])
		{
		auxi=weight[i];weight[i]=weight[j];weight[j]=auxi;
		auxi=ii;ii=-jj;jj=-auxi;
		}
	i+=ii;j+=jj;
	}
if (i-li>1) quick(li,i-1);
if (lf-i>1) quick(i+1,lf);
}

void citire(FILE *f);

int main()
{
FILE *f=fopen("zebughil.in","r");
FILE *gg=fopen("zebughil.out","w");
long int i,fs;
for (i=1;i<=T;i++)
	{
	citire(f);
	sol=1000;
	quick(1,n);
	gen(1,n);
	fprintf(gg,"%ld\n",sol);
	}
fcloseall();
return 0;
}

////////////////////////////////
// INPUT and OUTPUT
////////////////////////////////

void citire(FILE *f)
{
fscanf(f,"%ld%ld",&n,&g);
long int i;
for (i=1;i<=n;i++) fscanf(f,"%ld",&weight[i]);
}