Pagini recente » Borderou de evaluare (job #569084) | Borderou de evaluare (job #2005611) | Borderou de evaluare (job #1427983) | Borderou de evaluare (job #2479062) | Cod sursa (job #2501177)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream in("economie.in");
ofstream out("economie.out");
int n, pref;
int v[1005];
bool posibil[50005];
vector<int> ansV;
bool ok()
{
for (int i = pref + 1; i <= n; i++)
if (!posibil[v[i]])
return false;
return true;
}
int main()
{
posibil[0] = 1;
in >> n;
for (int i = 1; i <= n; i++)
in >> v[i];
sort(v + 1, v + n + 1);
while (!ok())
{
pref++;
for (int i = 0; i <= v[n] - v[pref]; i++)
posibil[i + v[pref]] = posibil[i + v[pref]] || posibil[i];
}
for (int i = 1; i <= pref; i++)
{
bool isDiv = false;
for (int x : ansV)
if (v[i] % x == 0)
{
isDiv = true;
break;
}
if (!isDiv)
ansV.push_back(v[i]);
}
out << ansV.size() << '\n';
for (int x : ansV)
out << x << '\n';
}