Cod sursa(job #462750)

Utilizator crushackPopescu Silviu crushack Data 13 iunie 2010 12:29:45
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <stdio.h>
#define lung 5000000
#define lng 50000

bool a[lng+1], s[lung+1];
int r[1001],N,Max,Su;

void citire()
{
	int i,x;
	freopen("economie.in","r",stdin);
	scanf("%d",&N);
	for (i=0;i<N;i++)
	{
		scanf("%d",&x);
		a[x]=true;
		Max = (x>Max) ? x : Max;
	}
	fclose(stdin);
}

void scriere()
{
	int i;
	freopen("economie.out","w",stdout);
	for (i=0;i<=r[0];i++)
		printf("%d\n",r[i]);
	fclose(stdout);
}

void rez()
{
	int i,j,Smax;
	s[0]=true;Smax=0;
	for (i=1;i<=Max;i++)
		if (a[i] && !s[i])
		{
			r[++r[0]]=i;
			for (j=0;j<=Max;j++)
				if (s[j])
				{
					s[j+i]=true;
				}
		}
}

int main()
{
	citire();
	rez();
	scriere();
	return 0;
}