Cod sursa(job #288000)

Utilizator stefynr8Space Monkey stefynr8 Data 25 martie 2009 14:13:03
Problema Economie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<stdio.h>
#define NMAX 1000

int n,i,j,ok,k,v[NMAX],t[50*NMAX],max;

void quick(int st, int dr)
{
 int i=st,j=dr;
 int p;
 p=v[(i+j)/2];
 if(i>j) return;
 while (i<=j)
	{
	while(v[i]<p) i++;
	while(v[j]>p) j--;
	if(i<=j){
		 v[0]=v[i];
		 v[i]=v[j];
		 v[j]=v[0];
		 i++;
		 j--;
		 }
	}

 if(st<j) quick(st,j);
 if(i<dr) quick(i,dr);

}


int main()
{
 freopen("economie.in","r",stdin);
 freopen("economie.out","w",stdout);

 scanf("%d", &n);
 for(i=1;i<=n;i++)
	{
	scanf("%d", &v[i]);
	if(v[i]>max) max=v[i];
	}

 quick(1,n);


 for(i=1;i<=n;i++)
    {
    ok=1;
    if(t[v[i]]==0){
		   t[i]=2;
		   k++;
		    }

    for(j=i;j<=max;j++)
	if(t[j-v[i]]!=0){
			 t[j]=1;
			 }
    }

 printf("%d\n", k);
 for(i=1;i<=max;i++)
    if(t[i]==2) printf("%d ", i);



return 0;
}