Cod sursa(job #118034)

Utilizator megabyteBarsan Paul megabyte Data 22 decembrie 2007 22:53:15
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#define INF "economie.in"
#define OUF "economie.out"
#define NMAX 50002
#define pb(arg) push_back(arg)
using namespace std;
int main()
{
	int i,j,n,x,maxv;
	vector<int> v,sol;
	char use[NMAX]={0};
	FILE *in,*out,*test;

	in=fopen(INF,"r");
	out=fopen(OUF,"w");
	
	maxv=0;
	fscanf(in,"%d",&n);
	for(i=0;i<n;++i) 
	{ 
		fscanf(in,"%d",&x);
		v.pb(x);
		maxv=max(x,maxv); 
	}

	sort(v.begin(),v.end());
	
	use[0]=1;i=0;
	while(i<n)
	{
	if(!use[v[i]])
	{
		x=v[i];
		sol.pb(x);
		j=0;
		while(j+x<=maxv)
		{
			if(use[j]) use[j+x]=1;
			++j;
		}

	}
	++i;
	}

	fprintf(out,"%d\n",sol.size());
	for(i=0;i<sol.size();++i)   fprintf(out,"%d\n",sol[i]);

	fclose(in);fclose(out);
	return 0;
}