Cod sursa(job #184402)

Utilizator tvladTataranu Vlad tvlad Data 23 aprilie 2008 16:54:58
Problema Economie Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 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;

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;
	for (int i = 1, cur = 0; i <= m; ++i) {
		for (int j = 0; j < s.size() && !ok[i]; ++j)
			if (i - s[j] >= 0)
				ok[i] = ok[i] || ok[i-s[j]];
		if (i == v[cur]) {
			if (!ok[i]) {
				s.push_back(i);
				ok[i] = true;
			}
			++cur;
		}
	}
	printf("%d\n",s.size());
	for (int i = 0; i < s.size(); ++i) printf("%d\n",s[i]);
	return 0;
}