Cod sursa(job #109524)

Utilizator swift90Ionut Bogdanescu swift90 Data 25 noiembrie 2007 11:36:36
Problema Economie Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 1, Clasa a 10-a Marime 0.7 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
int nr[1010],sol[1010],s,minim;
void sum(int i,int j){
	if(j<minim){
		while(sol[j]+s<=nr[i]){
			s+=sol[j];
			sum(i,j+1);
		}
	}
}
int main(){
	freopen("economie.in","r",stdin);
	freopen("economie.out","w",stdout);
	int n,i,j,ok;
	
	scanf("%d",&n);
	for(i=0;i<n;++i)
		scanf("%d",&nr[i]);
	
	sort(nr,nr+n);
	sol[0]=nr[0];
	minim=1;
	for(i=1;i<n;++i){
		ok=1;
		for(j=0;j<minim && ok;++j){
			s=0;
			sum(i,j);
			if(s==nr[i])
				ok=0;
		}
		if(ok){
			sol[minim]=nr[i];
			++minim;
		}
	}
	
	printf("%d\n",minim);
	for(i=0;i<minim;++i)
		printf("%d\n",sol[i]);
	
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}