Cod sursa(job #1013185)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 20 octombrie 2013 15:20:07
Problema Ghiozdan Scor 100
Compilator cpp Status done
Runda Lista lui wefgef Marime 1.01 kb
#include <cstdio>
#include <algorithm>

using namespace std;
const int Gmax = 75005;

int G, N, mg, last[ Gmax ], sol[ Gmax ],v[202], maxi;

inline void read()
{
    scanf("%d%d",&N,&G);
    int x;
    for(int i = 1;i <= N;++i){
        scanf("%d",&x);
        ++v[x];
        maxi = max(x,maxi);
    }
}

inline void solve()
{
    int i, j, k, x;
    sol[0] = 1;
    for(i = maxi;i ; --i)
        if(v[i]) for(j = G-i;j >= 0; --j)
            if(sol[j])
                for(k = 1,x = i;k<=v[i] && j+x<=G && !sol[j+x]; ++k,x+=i){
                    sol[j+x] = sol[j]+k;
                    last[j+x] = i;
                    if(j+x>mg)
                        mg = j+x;
                }
}

inline void print()
{
    printf("%d %d\n",mg,sol[mg]-1);
    while(mg){
        printf("%d\n",last[mg]);
        mg -= last[mg];
    }
}

int main()
{

    freopen("ghiozdan.in","r",stdin);
    freopen("ghiozdan.out","w",stdout);

    read();
    solve();
    print();
    return 0;
}