Cod sursa(job #475179)

Utilizator darrenRares Buhai darren Data 6 august 2010 12:17:48
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;

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

int n, mins;
int a[1001];
bool v[50005];
vector<int> sol;

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

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

void Solve()
{
	sort(a + 1, a + n + 1);

	v[0] = 1;
	for (int i = 1; i <= n; ++i)
		if (v[a[i]] == 0)
		{
			sol.push_back(a[i]);

			++mins;
			for (int j = 0; 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 = 0; i < sol.size(); ++i)
		fout << sol[i] << '\n';
	fout.close();
}