Pagini recente » Cod sursa (job #111719) | Cod sursa (job #9705) | Cod sursa (job #657519) | Cod sursa (job #1134714) | Cod sursa (job #274032)
Cod sursa(job #274032)
#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;}