Pagini recente » Profil margiki | Cod sursa (job #3133600) | Cod sursa (job #572261) | Cod sursa (job #2963948) | Cod sursa (job #18364)
Cod sursa(job #18364)
#include<stdio.h>
int g,n,gmax,max,nmin,i,j,ga,a[20001],v[75001],t[75001],sol[20001];
void scrie(int i)
{
if(i==0)
return;
sol[t[i]]=1;
scrie(i-a[t[i]]);
}
int main()
{
freopen("ghiozdan.in","r",stdin);
freopen("ghiozdan.out","w",stdout);
scanf("%d%d",&n,&g);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
a[0]=0;
v[0]=1;
max=0;
for(i=1;i<=n;i++)
{
ga=0;
for(j=max;j>=0;j--)
if(((v[j]+1<v[j+a[i]] &&v[j+a[i]]!=0)||!v[j+a[i]])&&v[j])
{
if(j+a[i]<=g)
{
if(ga==0&&j>0)
{
ga=1;
int k;
v[j+a[i]]=v[j]+1;
t[j+a[i]]=i;
for(k=1;k<=i;k++)
sol[k]=0;
scrie(j+a[i]);
}
v[j+a[i]]=v[j]+1;
t[j+a[i]]=i;
}
if(j+a[i]>g)
max=g;
else
if(j+a[i]>max)
max=j+a[i];
}
}
for(i=g;i>=1;i--)
if(v[i])
{
printf("%d %d\n",i,v[i]-1);
break;
}
for(j=1;j<=i;j++)
if(sol[j])
printf("%d\n",a[j]);
return 0;
}