Cod sursa(job #475175)

Utilizator darrenRares Buhai darren Data 6 august 2010 12:08:20
Problema Economie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
#include <algorithm>

using namespace std;

void Read();
void Solve();
void Write();

int n, mins;
int a[1001];
char v[50001];

int main()
{
	Read();
	Solve();
	Write();
}

void Read()
{
	ifstream fin("economie.in");
	fin >> n;
	for (int i = 1; i <= n; ++i)
	{
		fin >> a[i];
		v[a[i]] = 1;
	}
	fin.close();
}

void Solve()
{
	sort(a + 1, a + n + 1);
	for (int i = 1; i <= n; ++i)
		if (v[a[i]] == 1)
		{
			++mins;
			v[a[i]] = 2;
			for (int j = a[i]; j <= 50000 - a[i]; ++j)
				v[j + a[i]] |= v[j];

			bool ok = true;
			for (int j = i + 1; j <= n; ++j)
				ok &= (v[a[j]] == 1);
			if (ok == true) break;
		}
}

void Write()
{
	ofstream fout("economie.out");
	fout << mins << '\n';
	for (int i = 1; i <= n; ++i)
		if (v[a[i]] == 2)
			fout << a[i] << '\n';
	fout.close();
}