Cod sursa(job #1898360)

Utilizator SenibelanMales Sebastian Senibelan Data 1 martie 2017 22:53:39
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#include <algorithm>
#include <vector>
#define NMAX 1003

using namespace std;

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

int N, contor;
int v[NMAX];
int S[50005];
int maxi, mini;

vector <int> sol;


void Read(){
    in >> N;
    for(int i = 1; i <= N; ++i)
        in >> v[i];
}

void Solve(){
    sort(v + 1, v + N + 1);
    maxi = v[N];
    mini = v[1];
    for(int i = 1; i <= N; ++i){
        if(!S[v[i]]){
            sol.push_back(i);
            S[v[i]] = 1;
            for(int j = mini; j <= maxi - v[i]; ++j){
                if(S[j] && j + v[i] <= maxi)
                    S[j + v[i]] = 1;
            }
        }
    }
}

void Print(){
    int sz = sol.size();
    out << sz << "\n";
    for(int i = 0; i < sz; ++i)
        out << v[sol[i]] << " ";
    out << "\n";
}

int main()
{
    Read();
    Solve();
    Print();
    return 0;
}