Cod sursa(job #2515876)

Utilizator betybety bety bety Data 29 decembrie 2019 17:48:42
Problema Economie Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("economie.in");
ofstream out("economie.out");
const int lim=1e3+3;
const int lim2=5e4+3;
int v[lim];
int f[lim2];
int invers[lim2];
int main()
{
    int n,maxx=-1;
    in>>n;
    for(int i=1;i<=n;++i)
        in>>v[i];
    sort(v+1,v+n+1);
    for(int i=1;i<=n;++i)
    {
        invers[v[i]]=i;
        if(v[i]>maxx)
            maxx=v[i];
    }
    f[0]=1;
    int cnt=0;
    for(int i=1;i<=n;++i)
    if(v[i]!=-1)
    {
        ++cnt;
        for(int j=0;j<=maxx;++j)
        if(f[j]==1)
        {
            if(invers[j]>0 and invers[j]>=i+1)
                v[invers[j]]=-1;
            if(j+v[i]<=maxx)
                f[j+v[i]]=1;
        }
    }
    out<<cnt<<endl;
    for(int i=1;i<=n;++i)
        if(v[i]!=-1)
        out<<v[i]<<endl;
    return 0;
}