Cod sursa(job #184350)

Utilizator tvladTataranu Vlad tvlad Data 23 aprilie 2008 15:54:29
Problema Economie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;

const int N = 1000;
const int M = 50000;

int n,m;
int v[N];
bool ok[M+1];
vector<int> s;

void insert ( int k ) {
//	printf("Insert %d\n",v[k]);
	s.push_back(v[k]);
	for (int i = v[k]; i <= m; ++i) ok[i] = ok[i] || ok[i-v[k]];
//	for (int i = 0; i <= m; ++i) printf("%d ",(int)ok[i]);
//	printf("\n");
}

int main() {
	freopen("economie.in","rt",stdin);
	freopen("economie.out","wt",stdout);
	scanf("%d",&n);
	for (int i = 0; i < n; ++i) scanf("%d",&v[i]);
	sort(v,v+n);
	m = v[n-1];
	ok[0] = true;
	insert(0);
	for (int i = 1; i < n; ++i)
		if (!ok[i]) insert(i);
	printf("%d\n",s.size());
	for (int i = 0; i < s.size(); ++i) printf("%d\n",s[i]);
	return 0;
}