Cod sursa(job #1935332)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 22 martie 2017 11:10:13
Problema Economie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<algorithm>
#include<fstream>

using namespace std;
ifstream fin("economie.in");
ofstream fout("economie.out");
int v[1005],z[1005];
int f[50005], t[50005];
int n,i,j,k,ok,maxi;

int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>v[i];
        t[i]=1;ok++;
        if(v[i]>maxi)
            maxi=v[i];
    }
    sort(v+1, v+1+n);
    f[0]=1;
    for(i=1;i<=n;i++)
    {
        if(t[v[i]]==1)
        {
           ok--;z[++k]=v[i];
           t[v[i]]=0;
           if(ok==0)
                break;
        }
        for(j=0;j<=maxi;j++)
        {
            if(f[j]==1&&j+v[i]<=maxi)
            {
                f[j+v[i]]=1;
                if(t[j+v[i]]==1)
                {
                    ok--;
                    t[j+v[i]]=0;
                    if(z[k]!=v[i])
                        z[++k]=v[i];
                    if(ok==0)
                        break;
                }
            }
        }
        if(ok==0)
            break;
    }
    fout<<k<<"\n";
    for(i=1;i<=k;i++)
        fout<<z[i]<<"\n";
    fin.close();
    fout.close();
    return 0;
}