Cod sursa(job #550521)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 9 martie 2011 18:30:00
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include<stdio.h>
#include<algorithm>
using namespace std;
#define maxN 1005
#define Vmax 50005
FILE*f=fopen("economie.in","r");
FILE*g=fopen("economie.out","w");

int i,N,V[maxN],j,ok,Sol[maxN],K;
char S[Vmax];

int main () {
	fscanf(f,"%d",&N);
	for ( i = 1 ; i <= N ; ++i ){
		fscanf(f,"%d",&V[i]);
	}
	
	sort(V+1,V+N+1);
	
	S[0] = 1;
	
	for ( i = 1 ; i <= N && !ok ; ++i ){
		if ( S[ V[i] ] )	continue;
		S[V[i]] = 1;
		Sol[++K] = V[i];
		
		ok = 1;
		for ( j = 0 ; j <= V[N] ; ++j ){
			if ( S[ j ] && j + V[i] <= V[N] )
				S[ j + V[i] ] = 1;
			else	if ( !S[j] )	ok = 0;
		}
	}
	
	fprintf(g,"%d\n",K);
	for ( i = 1 ; i <= K ; ++i ){
		fprintf(g,"%d\n",Sol[i]);
	}
	
	fclose(f);
	fclose(g);
	
	return 0;
}