Pagini recente » Cod sursa (job #2137014) | Cod sursa (job #265553) | Cod sursa (job #1264401) | Cod sursa (job #1331838) | Cod sursa (job #3246386)
//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;
}