Pagini recente » Cod sursa (job #1662790) | Arhiva de probleme | Cod sursa (job #566940) | Cod sursa (job #664579) | Cod sursa (job #1746629)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("ghiozdan.in");
ofstream fout("ghiozdan.out");
int n,i,g,k,G,gg;
int gr[20001],dp[75001],lg[75001],pre[75001],nr[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++)
{
for(g=G;g>=gr[i];g--)
if(dp[g-gr[i]]==1 && nr[g]==0)
{
dp[g]=1;
if(lg[g]>lg[g-gr[i]]+1 || lg[g]==0)
{
lg[g]=lg[g-gr[i]]+1;
pre[g]=i;
gg=g-gr[i];
while(gg!=0)
{
nr[gg]=1;
gg=gg-gr[pre[gg]];
}
}
}
else
nr[g]=0;
}
for(g=G;g>=1;g--)
if(dp[g]==1)
{
k=0;
fout<<g<<" "<<lg[g]<<'\n';
while(g!=0)
{
v[++k]=pre[g];
g=g-gr[pre[g]];
}
for(i=k;i>=1;i--)
fout<<gr[v[i]]<<'\n';
break;
}
return 0;
}