Cod sursa(job #3246386)

Utilizator Commander_XDunel Stefan-Octavian Commander_X Data 2 octombrie 2024 20:35:23
Problema Economie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.82 kb
//https://www.infoarena.ro/problema/economie
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>

std::ifstream fin("economie.in");
std::ofstream fout("economie.out");

using namespace std;

vector<bool> dp;
vector<int> v;
stack<int> S;

int max(int a, int b)
{
	return a > b ? a : b;
}
int main()
{
	int n, maxim = 0;
	fin >> n;
	v.resize(n + 1);
	for (int i = 1; i <= n; ++i)
	{
		fin >> v[i];
		maxim = max(maxim, v[i]);
	}
	dp.resize(maxim + 1, false);
	sort(v.begin(), v.end());
	for (int i = 1; i <= n; ++i)
	{
		if (!dp[v[i]])
		{
			S.push(v[i]);
			dp[v[i]] = true;
		}
		for (int j = 1; v[i] + j <= maxim; ++j)
			if (dp[j])
				dp[j + v[i]] = true;
	}

	fout << S.size() << '\n';
	while (!S.empty())
	{
		fout << S.top() << '\n';
		S.pop();
	}
	return 0;
}