Cod sursa(job #1935335)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 22 martie 2017 11:13:59
Problema Economie Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 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)
            {
                if(j+v[i]<=maxi)
                {
                    if(f[j+v[i]]==0)
                    {
                        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;
                        }
                    }
                }
                else
                    break;
            }
        }
        if(ok==0)
            break;
    }
    fout<<k<<"\n";
    for(i=1;i<=k;i++)
        fout<<z[i]<<"\n";
    fin.close();
    fout.close();
    return 0;
}