Pagini recente » Cod sursa (job #2328591) | Cod sursa (job #2580372) | Cod sursa (job #2621231) | Cod sursa (job #1009451) | Cod sursa (job #3144075)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("ghiozdan.in");
ofstream fout("ghiozdan.out");
int dp[75001], u[75001], nr[75001], f[201];
void F(int s)
{if(u[s]!=0)
{fout<<u[s]<<"\n";
F(s-u[s]);
}
}
int main()
{ int n, s, a;
fin>>n>>s;
for(int i=1;i<=n;i++)
{fin>>a;
f[a]++;
}
for(int i=200;i>0;i--)
if(f[i]!=0)
{for(int j=i;j<=s;j++)
if((j==i || dp[j-i]!=0) && (dp[j]==0 || dp[j]>dp[j-i]+1))
{if(u[j-i]!=i)dp[j]=dp[j-i]+1, nr[j]=1, u[j]=i;
else if(nr[j-i]<f[i])dp[j]=dp[j-i]+1, nr[j]=1+nr[j-i], u[j]=i;
}
}
while(dp[s]==0)
s--;
fout<<s<<" "<<dp[s]<<"\n";
F(s);
return 0;
}