Pagini recente » Cod sursa (job #21760) | Cod sursa (job #362997) | Cod sursa (job #3344865) | Monitorul de evaluare | Cod sursa (job #3349019)
#pragma GCC optimize("Ofast,unroll-loops")
#include <fstream>
#include <algorithm>
#define GMAX 75002
#define NMAX 20002
#define INF (1<<30)
using namespace std;
ifstream fin("ghiozdan.in");
ofstream fout("ghiozdan.out");
int N,G,vmax,sum,v[NMAX],dp[GMAX],t[GMAX];
void rec(int x)
{
while(t[x]!=0)
{
fout<< x-t[x] << "\n";
x=t[x];
}
fout<< x-t[x] << "\n";
}
void citire()
{
fin>>N>>G;
for(int i=1; i<=N; i++)
{
fin>>v[i];
}
}
int main()
{
citire();
for(int i=1; i<=G; i++)
{
dp[i]=INF;
}
sort(v+1,v+1+N);
sum=vmax=0;
for(int i=N; i>=1; i--)
{
for(int j=min(sum,G-v[i]); j>=0; j--)
{
if(dp[j]!=INF && dp[j+v[i]]==INF)
{
dp[j+v[i]]=dp[j]+1;
t[j+v[i]]=j;
vmax=max(vmax,j+v[i]);
}
}
sum+=v[i];
}
fout<< vmax << " " << dp[vmax] << "\n";
rec(vmax);
return 0;
}