Cod sursa(job #2588918)

Utilizator MateiAruxandeiMateiStefan MateiAruxandei Data 25 martie 2020 16:22:26
Problema Ghiozdan Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>

using namespace std;

ifstream fin("ghiozdan.in");
ofstream fout("ghiozdan.out");

int fr[205], dp[75005], last[75005];

int main()
{
    int n, g;
    fin >> n >> g;

    for(int i = 1; i <= n; ++i)
    {
        int x;
        fin >> x;

        fr[x] ++;
    }

    dp[0] = 1;
    for(int i = 200; i >= 1; --i)
        if(fr[i])
            for(int s = g; s >= 0; --s)
                if(dp[s])
                {
                    int times = min(fr[i], (g - s) / i);
                    for(int k = 1; k <= times; ++k){
                        if(dp[k * i + s])
                            break;
                        dp[k * i + s] = dp[s] + k;
                        last[k * i + s] = i;
                    }
                }

    while(!dp[g])
        --g;
    fout << g << ' ' << dp[g] - 1 << '\n';
    while(g){
        fout << last[g] << '\n';
        g -= last[g];
    }
    return 0;
}