Cod sursa(job #111514)

Utilizator webspiderDumitru Bogdan webspider Data 30 noiembrie 2007 10:28:40
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <iostream>
#include <stdio.h>
#include <vector>

using namespace std;

#define pb push_back
#define sz size()


const int maxV = 50001;

vector<int> sir;
vector<int> sol;

bool potA[ maxV ];

int n;

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

	scanf("%d\n", &n );

	for ( i = 1; i <= n; i++ ) {
		scanf("%d\n", &aux );
		sir.pb( aux );
	}
	sort( sir.begin(), sir.end() );
	potA[ 0 ] = 1;

	for ( i = 0; i < sir.sz; i++ ) {
		if ( !potA[ sir[ i ] ] ) {
			sol.pb( sir[ i ] );
			for ( j = 0; j < maxV; j++ )
				if ( potA[ j ] && j + sir[i] < maxV )
					potA[ j + sir[i] ] = 1;
		}
	}
	
	printf("%d\n", sol.sz);
	for( i = 0; i < sol.sz; i++ )
		printf("%d\n", sol[i] );

	fclose(stdin);
	fclose(stdout);

	return 0;
}