Pagini recente » Cod sursa (job #425901) | Cod sursa (job #772813) | Cod sursa (job #2408321) | Cod sursa (job #2588033) | Cod sursa (job #2526971)
#include <fstream>
#define inf 30000
using namespace std;
ifstream cin("ghiozdan.in");
ofstream cout("ghiozdan.out");
int v[20005],dp[75005],last[75005],sol[75005];
int main()
{
int n,g,gmax=-1,next=-1;
cin>>n>>g;
for(int i=1;i<=n;++i)
cin>>v[i];
for(int j=1;j<=g;++j)
dp[j]=inf;
for(int i=1;i<=n;++i)
{
for(int j=g-1;j>=0;--j)
if(dp[j]!=inf and j+v[i]<=g)
{
if(j+v[i]>gmax)
{
gmax=j+v[i];
dp[j+v[i]]=dp[j]+1;
sol[gmax]=v[i];
last[gmax]=v[i];
next=j;
sol[next]=last[next];
next=j-last[next];
}
else if(j+v[i]==gmax and dp[j+v[i]]>dp[j]+1)
{
gmax=j+v[i];
dp[j+v[i]]=dp[j]+1;
sol[gmax]=v[i];
last[gmax]=v[i];
next=j;
sol[next]=last[next];
next=j-last[next];
}
else if(j!=next)
{
if(dp[j+v[i]]>dp[j]+1)
dp[j+v[i]]=dp[j]+1,last[j+v[i]]=v[i];
}
else if(j==next)
{
if(dp[j+v[i]]>dp[j]+1)
dp[j+v[i]]=dp[j]+1,last[j+v[i]]=v[i];
sol[next]=last[next];
next=j-last[next];
}
}
}
cout<<gmax<<" "<<dp[gmax]<<endl;
int nr=dp[gmax];
for(int i=1;i<=nr;++i)
{
cout<<sol[gmax]<<endl;
gmax=gmax-sol[gmax];
}
return 0;
}