Cod sursa(job #1402411)

Utilizator victormarinMarin Victor victormarin Data 26 martie 2015 16:09:08
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#include <bitset>
#define filein "economie.in"
#define fileout "economie.out"
#define VALMAX 50002
using namespace std;

vector <int> sol;
bitset <VALMAX> Done;
int v[1001];
int N;
int maxx;

void ReadData();
void PrintData();

int main()
{
    ReadData();
    sort(v+1,v+N+1);
    register int i,j;
    for (i=1; i<=N; i++)
    {
        if (!Done[v[i]])
        {
            sol.push_back(v[i]);
            Done[v[i]]=1;
            for (j=1; j<=maxx-v[i]; j++)
                if (Done[j]) Done[j+v[i]]=1;
        }
    }
    PrintData();
    return 0;
}

void ReadData()
{
    FILE *in;
    in=fopen(filein,"r");
    fscanf(in,"%d",&N);
    register int i;
    for (i=1; i<=N; i++)
    {
        fscanf(in,"%d",v+i);
        if (maxx<v[i]) maxx=v[i];
    }

    fclose(in);
}

void PrintData()
{
    FILE *out;
    out=fopen(fileout,"w");
    vector <int> :: iterator it;
    fprintf(out,"%d\n",sol.size());
    for (it=sol.begin(); it<sol.end(); it++)
        fprintf(out,"%d\n",(*it));
    fclose(out);
}