Pagini recente » Cod sursa (job #2069333) | Cod sursa (job #2064934) | Cod sursa (job #1073163) | Cod sursa (job #184561) | Cod sursa (job #18330)
Cod sursa(job #18330)
#include <stdio.h>
#include <string.h>
using namespace std;
int a[20100],b[75100],c[75100],n,g,gmax,ult[75100];
int main()
{
freopen("ghiozdan.in","r",stdin);
freopen("ghiozdan.out","w",stdout);
scanf("%d %d\n",&n,&g);
int i;
for (i=0;i<n;i++)
scanf("%d\n",&a[i]);
c[a[0]]=b[a[0]]=1;
ult[0]=-1;
ult[a[0]]=0;
gmax=a[0];
int j;
for (i=1;i<n;i++)
{
c[a[i]]=1;
ult[a[i]]=i;
for (j=1;j<=g-a[i];j++)
if (b[j]&&(c[j+a[i]]>b[j]+1||c[j+a[i]]==0))
{
c[j+a[i]]=b[j]+1;
ult[j+a[i]]=i;
if (j+a[i]>gmax)
gmax=j+a[i];
}
memcpy(b,c,(g+1)*sizeof(int));
}
printf("%d %d\n",gmax,b[gmax]);
while (ult[gmax]>-1)
{
printf("%d\n",a[ult[gmax]]);
gmax-=a[ult[gmax]];
}
return 0;
}