Pagini recente » Cod sursa (job #120779) | Cod sursa (job #2129069) | Cod sursa (job #1477064) | Cod sursa (job #2364940) | Cod sursa (job #1746636)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("ghiozdan.in");
ofstream fout("ghiozdan.out");
int n,i,g,k,G,gg,maxx;
int gr[20001],dp[75001],lg[75001],pre[75001],v[20001];
int main()
{
fin>>n>>G;
for(i=1;i<=n;i++)
fin>>gr[i];
dp[0]=1;
for(i=1;i<=n;i++)
{
maxx=0;
for(g=G;g>=gr[i];g--)
if(dp[g-gr[i]]==1)
{
dp[g]=1;
if(lg[g]>lg[g-gr[i]]+1 || lg[g]==0)
{
lg[g]=lg[g-gr[i]]+1;
pre[g]=i;
}
if(g>maxx)
{
maxx=g;
k=0;
gg=g;
while(gg!=0)
{
v[++k]=pre[gg];
gg=gg-gr[pre[gg]];
}
}
}
}
fout<<maxx<<" "<<k<<'\n';
for(i=k;i>=1;i--)
fout<<gr[v[i]]<<'\n';
return 0;
}