Cod sursa(job #1230571)

Utilizator smaraldaSmaranda Dinu smaralda Data 18 septembrie 2014 16:25:14
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;

const int NMAX = 105, VMAX = 50000;

int v[NMAX], vis[VMAX + 10];

vector <int> sol;
vector <int>::iterator it;

int main() {
    freopen("economie.in", "r", stdin);
    freopen("economie.out", "w", stdout);
    int n, i, j, lim;

    scanf("%d", &n);
    for(i = 1; i <= n; ++ i)
        scanf("%d", &v[i]);
    sort(v + 1, v + 1 + n);

    vis[0] = 1;
    lim = 0;
    for(i = 1; i <= n; ++ i)
        if(!vis[v[i]]) {
            sol.push_back(v[i]);

            vis[v[i]] = 1;
            for(j = 0; j + v[i] <= VMAX; ++ j)
                if(vis[j])
                    vis[j + v[i]] = 1;
            lim += v[i];
        }

    printf("%d\n", sol.size());
    for(it = sol.begin(); it != sol.end(); ++ it)
        printf("%d\n", *it);
    return 0;
}