Cod sursa(job #383525)

Utilizator mottyMatei-Dan Epure motty Data 16 ianuarie 2010 19:29:53
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<stdio.h>
#include<stdlib.h>
const int N=2006,M=50001;
int max,v[N],c[M],r[N],n,nr;

int cmp( const void *p,const void *q )
{
	int x=*(int*)p,y=*(int*)q;
	if(x>y)
		return 1;
	if(x<y)
		return -1;
	return 0;
}

void read()
{
	scanf("%d",&n);
	for( int i=0 ; i<n ; ++i )
	{
		scanf("%d",&v[i]);
		if(v[i]>max)
			max=v[i];
	}
	qsort(v,n,sizeof(v[0]),cmp);
}

void solve()
{
	for( int i=0 ; i<n ; ++i )
		if( c[v[i]]==0 )
		{
			r[++nr]=v[i];
			c[v[i]]=1;
			for( int j=1 ; j+v[i]<=max ; ++j )
				if( c[j]!=0 )
					if( c[ j + v[i] ] == 0  )
						c[j+v[i]]=1;
		}
}

int main()
{
	freopen("economie.in","r",stdin);
	freopen("economie.out","w",stdout);
	read();
	solve();
	printf("%d\n",nr);
	for( int i=1 ; i<=nr ; ++i )
		printf("%d\n",r[i]);
	return 0;
}