Cod sursa(job #567140)

Utilizator rootsroots1 roots Data 29 martie 2011 19:23:25
Problema Economie Scor 80
Compilator cpp Status done
Runda 101 Marime 0.76 kb
#include <stdio.h>
#include <string.h>
#include <algorithm>

#define Dim 1001

using namespace std;

int v[Dim];
char ok[50*Dim],sel[Dim];

int main()
{
	int i,j,k,mx,sol,N;

	freopen("economie.in","r",stdin);

	scanf("%d",&N);
	for(i=1;i<=N;i++) scanf("%d",&v[i]);

	sort(v+1,v+N+1);

	sol=0;
	mx=0;
	memset(ok,0,sizeof(ok));
	memset(sel,0,sizeof(sel));
	ok[0]=1;

	for(i=1;i<=N;i++)
		if(ok[v[i]]==0)
		{
			sel[i]=1;
			for(j=mx;j>=0;j--)
				if(ok[j])
				{
					k=j+v[i];
					while(k<=50000)
					{
						ok[k]=1;
						k+=v[i];
					}
					k-=v[i];
					if(k>mx) mx=k;
				}
			sol++;
		}

	freopen("economie.out","w",stdout);

	printf("%d\n",sol);
	for(i=1;i<=N;i++)
		if(sel[i]) printf("%d\n",v[i]);

	return 0;
}