Cod sursa(job #274032)

Utilizator victor_bla_blaDumitrescu Victor victor_bla_bla Data 9 martie 2009 12:46:38
Problema Zebughil Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<fstream.h>
long a[18],s,g;
int b[18],sum[18],n,i,j,k,c,cmin,cmax;
int ad()
{int i;
	for (i=1;i<=j;i++)
		if (b[i]!=n-1) return 1;
return 0;}
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
void check()
{int c,i,ok=1;
long s[18];
	cmax=0;
	for (i=1;i<=n;i++)
		{s[i]=sum[i];
		 if (b[i]>cmax) cmax=b[i];}
	for (i=1;i<=j;i++)
		s[b[i]]=s[b[i]]+a[i];
	for (i=1;i<=n;i++)
		if (s[i]>g) {ok=0; break;}
	if (ok && cmax<cmin) cmin=cmax;}

int main()
{	for (k=1;k<=3;k++)
	{	fin>>n>>g;
		for (i=1;i<=n;i++)
			{sum[i]=0; b[i]=0;}
		for (i=1;i<=n;i++)
			fin>>a[i];
		for (i=1;i<n;i++)
			for (j=i+1;j<=n;j++)
				if (a[i]>a[j])
				{s=a[i];
				 a[i]=a[j];
				 a[j]=s;}
		b[n]=c=1; i=n;
		sum[c-1]=a[n];
		while (a[i]+a[i-1]>g)
			{c++;
			 b[i-1]=c;
			 sum[c-1]=a[i-1];
			 i--;}
                cmin=c;
		j=n-c;
		if (!j) fout<<n<<'\n';
		else
		{while (ad())
			{b[j]++;
			 i=j;
			 while (b[i]==n)
				{b[i]=0;
				 b[i-1]++;
				 i--;}
			 check();}
		fout<<cmin<<'\n';} cmin=cmax=j=0;}
	fout.close();
return 0;}