Cod sursa(job #2730978)

Utilizator NuSuntRomanIspir Alexandru NuSuntRoman Data 27 martie 2021 10:22:22
Problema Economie Scor 80
Compilator cpp-64 Status done
Runda simulare_oni_cex Marime 0.92 kb
#include <fstream>
#include <algorithm>
#include <queue>

using namespace std;

int N, k, v[1005], sol[50005], f[50005];
queue < int > Q;

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

int main() {
    fin >> N;
    for (int i = 1; i <= N; ++ i)
        fin >> v[i];
    sort(v + 1, v + N + 1);
    for (int i = 1; i <= N; ++ i) {
        if (!f[v[i]]) {
            sol[++ k] = v[i];
            f[v[i]] = 1;
            for (int j = 1; j <= 50000; ++ j)
                if (f[j])
                    Q.push(j);
            while (!Q.empty()) {
                int n = Q.front();
                if (n + v[i] <= 50000 && !f[n + v[i]]) {
                    f[n + v[i]] = 1;
                    Q.push(n + v[i]);
                }
                Q.pop();
            }
        }
    }
    fout << k << "\n";
    for (int i = 1; i <= k; ++ i)
        fout << sol[i] << " ";
    return 0;
}