Cod sursa(job #2515937)

Utilizator betybety bety bety Data 29 decembrie 2019 20:24:15
Problema Economie Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 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 w[lim];
int v[lim];
int f[lim2];
int invers[lim2];
int main()
{
    ios_base::sync_with_stdio(false);
    in.tie(0),out.tie(0);
    int n,maxx=-1;
    in>>n;
    for(int i=1;i<=n;++i)
        in>>w[i];
    sort(w+1,w+n+1);
    int nr=1;
    v[nr]=w[1];
    for(int i=2;i<=n;++i)
    {
        if(w[i]!=w[i-1])
            ++nr,v[nr]=w[i];
    }
    n=nr;
    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;
}