Cod sursa(job #3338155)

Utilizator RosheRadutu Robert Roshe Data 31 ianuarie 2026 23:03:10
Problema Ghiozdan Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>
#include <algorithm>
#include <climits>
#include <vector>

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

int N, Gmax;
int dp[75005];
int v[20000];
std::vector<std::vector<int>> result;

int main() {
    dp[0] = 0;
    fin >> N >> Gmax;
    result.resize(Gmax);
    for(int i = 1; i<=Gmax; i++) {
        dp[i] = INT_MAX;
    }
    for(int i = 0; i<N; i++) {
        fin >> v[i];
    }
    for(int i = 0; i<N; i++) {
        for(int w = Gmax; w >= 0; w--) {
            if(w-v[i] < 0) break;
            if(dp[w] == INT_MAX && dp[w-v[i]] == INT_MAX) continue;
            if(dp[w] > dp[w-v[i]] + 1) {
                result[w] = result[w-v[i]];
                result[w].push_back(v[i]);
            }
            dp[w] = std::min(dp[w], dp[w-v[i]] + 1);
        }
    }
    int g = Gmax;
    while(dp[g] == INT_MAX){
        g--;
    }
    fout << g << " " << dp[g] << "\n";
    for(const auto& x : result[g]) {
        fout << x << "\n";
    }
}