Cod sursa(job #2023246)

Utilizator stefan_creastaStefan Creasta stefan_creasta Data 18 septembrie 2017 17:15:23
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <cstdio>
#include <algorithm>
#include <bitset>
#include <vector>
using namespace std;
const int NMAX = 1005;
const int VALMAX = 50000;
bitset <VALMAX + 5> vf;
int v[NMAX];
vector <int> sol;

int main()
{
  int n;
  freopen("economie.in", "r", stdin);
  freopen("economie.out", "w", stdout);
  scanf("%d", &n);
  for(int i = 1; i <= n; ++i) {
    scanf("%d", &v[i]);
  }
  sort(v + 1, v + n + 1);
  vf[0] = 1;
  for(int i = 1; i <= n; ++i) {
    if(!vf[v[i]]) {
      sol.push_back(v[i]);
      for(int j = 0; j + v[i] <= VALMAX; ++j) {
        if(vf[j + v[i]] == 0 && vf[j] == 1) {
          vf[j + v[i]] = 1;
        }
      }
    }
  }
  int m = sol.size();
  printf("%d\n", m);
  for(int i = 0; i < m; ++i) {
    printf("%d\n", sol[i]);
  }
  return 0;
}