Cod sursa(job #111491)

Utilizator victorsbVictor Rusu victorsb Data 30 noiembrie 2007 01:38:17
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include <cstdio>
#include <bitset>
#include <algorithm>

using namespace std;

#define Nmax 1024
#define Vmax 50015

int n;
int sir[Nmax], list[Nmax];
bitset<Vmax> v;

void citire()
{
	int i;

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

void solve()
{
	int i, j, ct = 0;

    sort(sir+1, sir+n+1);

	v[0] = 1;
	for (i = 1; i <= n; ++i)
		if (!v[sir[i]])
		{
			for (j = 0; j + sir[i] <= sir[n]; ++j)
				if (v[j]) v[j + sir[i]] = 1;
			list[++ct] = sir[i];
		}

	printf("%d\n", ct);
	for (i = 1; i <= ct; ++i)
		printf("%d\n", list[i]);
}

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

	citire();
	solve();

	return 0;
}