Cod sursa(job #109300)

Utilizator CezarMocanCezar Mocan CezarMocan Data 25 noiembrie 2007 10:05:45
Problema Economie Scor 100
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasa a 10-a Marime 0.95 kb
#include <cstdio>
#include <algorithm>

using namespace std;

long n,v[1010],mx,i,j,t[50100],p[50100],ok,x[50100],nr;

int main(){
freopen("economie.in","r",stdin);
freopen("economie.out","w",stdout);
scanf("%ld",&n);
for (i=1;i<=n;i++)
    scanf("%ld",&v[i]);
sort(v+1,v+n+1);
mx=v[n];
t[0]=1;
for (i=1;i<=n;i++)
    {
    for (j=0;j<=mx-v[i];j++)
        if (t[j]==1)
            {
            if (t[j+v[i]]==0)
                {
                p[j+v[i]]=j;
                t[j+v[i]]=1;
                }    
            }    
    ok=1;
    for (j=i+1;j<=n;j++)
        if (t[v[j]]==0)
            ok=0;
    if (ok)
        i=n+1;
    }
for (i=1;i<=n;i++)  
    {
    j=v[i];
    while (j>0)
        {
        x[j-p[j]]=1;
        j=p[j];            
        }
    }
for (i=1;i<=mx;i++)
    if (x[i]==1)
        nr++;
printf("%ld\n",nr);
for (i=1;i<=mx;i++)
    if (x[i]==1)
        printf("%ld\n",i);
return 0;    
}