Pagini recente » Cod sursa (job #1180739) | Cod sursa (job #1103924) | Cod sursa (job #1805277) | Cod sursa (job #784039) | Cod sursa (job #19854)
Cod sursa(job #19854)
#include <stdio.h>
#define dim 100
int a[20000],n,i,j,b[75201],k,t[75201],c[20000];
long g,s,max;
void quick(int ls,int ld);
int imp(int ls,int ld);
int main ()
{ freopen ("ghiozdan.in","r",stdin);
freopen ("ghiozdan.out","w",stdout);
scanf("%d%ld",&n,&g);
for(i=1;i<=n;++i)
scanf("%d",&a[i]);
quick(1,n);
max=0;
b[0]=1;
for(i=1;i<=n;++i)
{ if(max+a[i]<=g)
{
b[max+a[i]]=1;
t[max+a[i]]=max;
max+=a[i];
}
for(j=max-1;j>=0;j--)
{ if(b[j]==1&&b[j+a[i]]==0)
{ b[j+a[i]]=1;
t[j+a[i]]=j;
if(j+a[i]>max&&j+a[i]<=g)
max=j+a[i];
}
}
}
for(i=g;;i--)
{ if(b[i]==1)
{ for(j=i;j>0;)
{ s+=j-t[j];
c[++k]=j-t[j];
j-=(j-t[j]);
}
break;
}
}
printf("%ld %d\n",s,k);
for(i=1;i<=k;++i)
printf("%d\n",c[i]);
return 0;
}
void quick(int ls,int ld)
{ int mij=imp(ls,ld);
if(mij-1>ls)
quick(ls,mij-1);
if(ld>mij+1)
quick(mij+1,ld);
}
int imp(int ls,int ld)
{ int ii=0,jj=-1;
while(ls<ld)
{ if(a[ls]<a[ld])
{ a[ls]^=a[ld]^=a[ls]^=a[ld];
ii^=jj^=ii^=jj;
ii*=-1;
jj*=-1;
}
ls+=ii;
ld+=jj;
}
return ls;
}