Cod sursa(job #235757)

Utilizator crusRus Cristian crus Data 25 decembrie 2008 19:41:51
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <stdio.h>
#include <stdlib.h>
#define nmax 1001
#define smax 50001

long n,i,j;
long v[nmax];
long s[smax];
long sol[nmax];
long cati=0;

void citire(void)
{
	freopen("economie.in","r",stdin);
	scanf("%ld",&n);
	for (i=1;i<=n;i++)	
		scanf("%ld",&v[i]);	
}

int comparare(const void *a,const void *b)
{
	if (*(long*)a>*(long*)b) return 1;
	return 0;
}

void solve(void)
{
	qsort(v,n+1,sizeof(long),comparare);
	s[0]=1;

	for (i=1;i<=n;i++)
		if (s[v[i]]==0)
			{
				sol[++cati]=v[i];
				for (j=0;j<=50000-v[i];j++)
					if (s[j]) s[j+v[i]]=1;					
			}
}

void afisare(void)
{
	freopen("economie.out","w",stdout);
	long i;
	printf("%ld\n",cati);
	for (i=1;i<=cati;i++)
		printf("%ld\n",sol[i]);
}

int main(void)
{
	citire();
	solve();
	afisare();
	return 0;
}