Cod sursa(job #109323)

Utilizator Adriana_SAdriana Sperlea Adriana_S Data 25 noiembrie 2007 10:11:52
Problema Economie Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasa a 9-a Marime 0.66 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

const int N_MAX = 1024;
const int V_MAX = 50010;

int v[N_MAX], is[V_MAX], sol[N_MAX];

int main()
{
	freopen("economie.in", "r", stdin);
#ifndef _SCREEN_
	freopen("economie.out", "w", stdout);
#endif

	int N, i, mx = 0;

	scanf("%d\n", &N);
	for (i = 1; i <= N; i ++) {
		scanf("%d ", &v[i]);
		mx += v[i];
	}

	sort(v + 1, v + N + 1);

	is[0] = 1;

	int j;
	for (i = 1; i <= N; i ++) {
		if (!is[v[i]]) {

			sol[++ sol[0]] = v[i];
			for (j = 0; j <= mx; j ++) {
				if (is[j]) is[j + v[i]] = 1;
			}
		}
	}

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

	return 0;
}