Pagini recente » Cod sursa (job #2065315) | Cod sursa (job #2729601) | Cod sursa (job #2755134) | Cod sursa (job #1949605) | Cod sursa (job #974160)
Cod sursa(job #974160)
#include <fstream>
#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],f[202], val_max;
inline void Read()
{
ifstream in(In);
in>>N>>G;
int x;
for(int i = 1;i <= N;++i)
{
in>>x;
++f[x];
val_max = max(x,val_max);
}
in.close();
}
inline void Solve()
{
int i, j, k, x;
Sol[0] = 1;
for(i = val_max;i ; --i)
if(f[i])
for(j = G-i;j >= 0; --j)
if(Sol[j])
for(k = 1,x = i;k<=f[i] && j+x<=G && !Sol[j+x]; ++k,x+=i)
{
Sol[j+x] = Sol[j]+k;
Last[j+x] = i;
if(j+x>MaxG)
MaxG = j+x;
}
}
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;
}