Cod sursa(job #1612200)

Utilizator cristina_borzaCristina Borza cristina_borza Data 24 februarie 2016 19:06:22
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <algorithm>
#include <fstream>
#include <bitset>
#include <cstdio>

#define NMAX 50005

using namespace std;

int v[1005] , ans[1005];
int n , mx , sol;

bitset <NMAX> c;

void read(int &x) {
    char ch;
    while(!isdigit(ch = getchar())) {

    }

    do {
        x = x * 10 + ch - '0';
    }while(isdigit(ch = getchar()));
}

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

    read(n);

    for(int i = 1 ; i <= n ; ++i) {
        read(v[i]);
        mx = max(mx , v[i]);
    }

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

    c[0] = 1;
    for(int i = 1 ; i <= n ; ++i) {
        if(c[v[i]] == 0) {
            for(int j = v[i] ; j <= mx ; ++j) {
                if(c[j] == 0) {
                    c[j] = c[j - v[i]];
                }
            }

            ans[++sol] = v[i];
        }
    }

    printf("%d\n" , sol);
    for(int i = 1 ; i <= sol ; ++i) {
        printf("%d\n" , ans[i]);
    }
    return 0;
}