Cod sursa(job #284549)

Utilizator mihaionlyMihai Jiplea mihaionly Data 21 martie 2009 19:47:50
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <stdio.h>
FILE *f= fopen("economie.in","r");
FILE *g= fopen("economie.out","w");
unsigned char ok[50001];
unsigned ax,n,a[1001],max,i,j,min[1001],k=0;
void swap(unsigned &aa,unsigned &ab)
 {
 unsigned aux=aa;
 aa=ab;
 ab=aux;
 }
int part(unsigned l,unsigned r)
 {
 unsigned p,ix,jx;
 p=a[r];
 jx=l-1;
 for(ix=l;ix<=r;ix++)
  if(a[ix]<=p)
   swap(a[++jx],a[ix]);
 return jx;
 }
void quickS(unsigned l,unsigned r)
 {
 unsigned poz;
 poz=part(l,r);
 if(l<poz-1)
  quickS(l,poz-1);
 if(r>poz+1)
  quickS(poz+1,r);
 }
int main()
 {
 fscanf(f,"%d",&n);
 for(i=1;i<=n;i++)
  {
  fscanf(f,"%d",&a[i]);
  if(a[i]>max||i==1)
   max=a[i];
  }
 quickS(1,n);
 ok[0]=1;
 for(i=1;i<=n;i++)
  {
  if(ok[a[i]]==0)
   min[++k]=a[i];
  else
   continue;
  for(j=0;j<=max;j++)
   if(ok[j]==1&&j+a[i]<=max)
    ok[j+a[i]]=1;
  }
 fprintf(g,"%d\n",k);  
 for(i=1;i<=k;i++)  
  fprintf(g,"%d\n",min[i]);  
 return 0;  
}