Cod sursa(job #655266)

Utilizator popoiu.georgeGeorge Popoiu popoiu.george Data 1 ianuarie 2012 22:23:41
Problema Economie Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include<stdio.h>
#include<vector>
#include<bitset>
#include<algorithm>
#define inf "economie.in"
#define outf "economie.out"
#define NMax 1001
#define VMax 50001
using namespace std;

int N, A[NMax];
bitset<VMax> s;
vector<int> sol;

void read()
{
    scanf("%d", &N);
    for(int i=1; i<=N; i++) scanf("%d", &A[i]);
}

void solve()
{
    sort( A+1, A+N+1 );

    s[0] = 1;
    for(int i=1; i<=N; i++) {
        if( !s[ A[i] ] ) sol.push_back( A[i] );
        for(int j=0; j<VMax; j++)
            if( s[j] && j+A[i]<VMax ) s[ j+A[i] ] = 1;
    }

    printf("%d\n", sol.size());
    for(int i=0; i<sol.size(); i++) printf("%d\n", sol[i]);
}

int main()
{
	freopen(inf,"r",stdin); freopen(outf,"w",stdout);
	read(); solve();
	return 0;
}