Cod sursa(job #970952)

Utilizator cont_de_testeCont Teste cont_de_teste Data 8 iulie 2013 04:58:02
Problema Economie Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <algorithm>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

#ifdef INFOARENA
	#define cin fin
	#define cout fout
#endif

ifstream fin("economie.in");
ofstream fout("economie.out");
const int VMax = 50100;

int N;
bool A[VMax];
vector<int> solution, values;


int main() {
	cin >> N; A[0] = true;
	
	for (int i = 1; i <= N; i++) {
		int X;
		cin >> X;
		values.push_back(X);
	}
	sort(values.begin(), values.end());
	
	for (int i = 1; i <= N; i++) {
		int X = values.at(i - 1);
		if (!A[X]) {
			solution.push_back(X);	
			for (int j = 0; j < VMax; j++) {
				if (A[j] && j + X <= VMax) {
					A[j + X] = true;
				}
			}
		}
	}
	
	cout << solution.size() << '\n';
	for (vector<int>::iterator it = solution.begin(); it != solution.end(); it++)
		cout << *it << ' ';
	cout << '\n';
}