Cod sursa(job #2748362)

Utilizator As932Stanciu Andreea As932 Data 30 aprilie 2021 10:05:20
Problema Ghiozdan Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>

using namespace std;

ifstream cin("ghiozdan.in");
ofstream cout("ghiozdan.out");

const int nmax = 2e4 + 5;
const int gmax = 75e3 + 5;

int n, g, fq[nmax], dp[gmax], wObj[gmax];

void read(){
    cin >> n >> g;

    for(int i = 1; i <= n; i++){
        int w;
        cin >> w;
        fq[w]++;
    }
}

void solve(){
    dp[0] = 1;
    for(int i = 200; i >= 1; i--)
        for(int j = g; j >= 0; j--)
            if(dp[j]){
                for(int k = 1; i * k + j <= g && k <= fq[i]; k++){
                    if(dp[i * k + j])
                        break;
                    dp[i * k + j] = dp[j] + k;
                    wObj[i * k + j] = i;
                }
            }

    while(!dp[g])
        g--;

    cout << g << " " << dp[g] - 1 << "\n";

    while(g){
        cout << wObj[g] << "\n";
        g -= wObj[g];
    }
}

int main()
{
    read();
    solve();

    return 0;
}