Pagini recente » Cod sursa (job #1083113) | Cod sursa (job #2180970) | Cod sursa (job #406636) | Cod sursa (job #2854941) | Cod sursa (job #974146)
Cod sursa(job #974146)
#include <fstream>
#include <algorithm>
#define In "ghiozdan.in"
#define Out "ghiozdan.out"
#define Nmax 20002
#define Gmax 75002
#define max(a,b) ((a)>(b)?(a):(b))
using namespace std;
int G, N, MaxG, Last[Gmax], Sol[Nmax], A[Nmax];
inline void Read()
{
ifstream f(In);
f>>N>>G;
for(int i = 1;i <= N;++i)
f>>A[i];
f.close();
}
inline void Solve()
{
int i,j;
sort(A+1,A+N+1,greater<int>());
Sol[0] = 1;
for(i = 1;i <= N; ++i)
for(j = G-A[i];j >= 0; --j)
if(Sol[j] && !Sol[j+A[i]])
{
Sol[j+A[i]] = Sol[j]+1;
Last[j+A[i]] = A[i];
if(j+A[i]>MaxG)
MaxG = j+A[i];
}
}
inline void Write()
{
ofstream g(Out);
g<<MaxG<<" "<<Sol[MaxG]-1<<"\n";
while(MaxG)
{
g<<Last[MaxG]<<"\n";
MaxG-=Last[MaxG];
}
g.close();
}
int main()
{
Read();
Solve();
Write();
return 0;
}