Pagini recente » Cod sursa (job #1918247) | Cod sursa (job #576091) | Cod sursa (job #387570) | Cod sursa (job #952868) | Cod sursa (job #18446)
Cod sursa(job #18446)
#include <stdio.h>
#define maxn 1010
#define maxx 15010
#define stop 10000000
int n,m,sol,rez;
int a[maxn],s[maxn];
int c[maxx],d[maxx],p[maxn][maxx];
int main()
{
freopen("ghiozdan.in","r",stdin);
freopen("ghiozdan.out","w",stdout);
int i,j,x,y;
scanf("%d %d",&n,&m);
for (i=1;i<=n;i++) scanf("%d",&a[i]);
sol=0;
for (i=1;i<=m;i++) c[i]=maxn;
c[0]=0;
for (i=1;i<=n;i++)
{
for (j=0;j<=m;j++)
{
d[j]=c[j];
p[i][j]=j;
}
for (j=0;j+a[i]<=m;j++)
if (d[j]!=maxn)
{
c[j+a[i]]=d[j]+1;
p[i][j+a[i]]=j;
if (j+a[i]>sol)
{
sol=j+a[i];
rez=d[j]+1;
}
else if ((j+a[i]==sol) && (d[j]+1<rez)) rez=d[j]+1;
}
}
x=n;
y=sol;
i=0;
while (x>0)
{
if (p[x][y]!=y)
{
s[++i]=a[x];
y=p[x][y];
}
x--;
}
printf("%d %d\n",sol,rez);
for (i=1;i<=rez;i++) printf("%d\n",s[i]);
return 0;
}