Cod sursa(job #974146)

Utilizator narcis_vsGemene Narcis - Gabriel narcis_vs Data 16 iulie 2013 15:35:30
Problema Ghiozdan Scor 40
Compilator cpp Status done
Runda Lista lui wefgef Marime 1 kb
#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;
}