Cod sursa(job #3164243)

Utilizator victor_gabrielVictor Tene victor_gabriel Data 2 noiembrie 2023 15:07:51
Problema Economie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

const int DIM = 1010;
const int MAX = 50010;

int n, maxCoin, solCnt;
int v[DIM];
bool dp[MAX], inArr[MAX], isSol[DIM];

int main() {
    fin >> n;
    for (int i = 1; i <= n; i++) {
        fin >> v[i];
        inArr[v[i]] = true;
        maxCoin = max(maxCoin, v[i]);
    }

    sort(v + 1, v + n + 1);

    dp[0] = true;
    for (int i = 1; i <= n; i++) {
        for (int j = v[i]; j <= maxCoin; j++) {
            if (dp[j - v[i]]) {
                if (!dp[j] && inArr[j] && !isSol[i]) {
                    solCnt++;
                    isSol[i] = true;
                }
                dp[j] = true;
            }
        }
    }

    fout << solCnt << '\n';
    for (int i = 1; i <= n; i++) {
        if (isSol[i])
            fout << v[i] << '\n';
    }

    return 0;
}