Pagini recente » Cod sursa (job #3152654) | Cod sursa (job #209118) | Cod sursa (job #3004919) | Cod sursa (job #942841) | Cod sursa (job #495706)
Cod sursa(job #495706)
#include<algorithm>
#include<vector>
using namespace std;
#define N_MAX 20002
#define G_MAX 75002
#define si short int
int tata[G_MAX];
si dp[G_MAX];
si a[N_MAX];
int g,j,poz,aux;
si i,n,solsz;
si ss[202];
si aa[N_MAX],b[N_MAX];
int main()
{
freopen("ghiozdan.in","r",stdin);
freopen("ghiozdan.out","w",stdout);
scanf("%hd%d",&n,&g);
for(i=1;i<=n;i++)
scanf("%hd",&a[i]);
for(i=1;i<=n;i++)
ss[a[i]]++;
for(i=2;i<=200;i++)
ss[i]+=ss[i-1];
for(i=1;i<=n;i++)
{
aa[i]=ss[a[i]];
ss[a[i]]--;
}
for(i=1;i<=n;i++)
b[aa[i]]=a[i];
memcpy(a,b,sizeof(a));
for(i=n;i>=1;i--)
{
for(j=g;j>=a[i];j--)
if(dp[j-a[i]]&&dp[j]==0)
{
dp[j]=i;
tata[j]=j-a[i];
}
dp[a[i]]=i;
}
for(j=g;j>=0;j--)
if(dp[j])
{
poz=j;
break;
}
printf("%d ",poz); aux=poz;
while(poz)
{
solsz++;
poz=tata[poz];
}
printf("%d\n",solsz);
poz=aux;
while(poz)
{
printf("%d\n",a[dp[poz]]);
poz=tata[poz];
}
return 0;
}