Cod sursa(job #283904)

Utilizator mihaionlyMihai Jiplea mihaionly Data 20 martie 2009 17:30:16
Problema Economie Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <stdio.h>
FILE *f= fopen("economie.in","r");
FILE *g= fopen("economie.out","w");
char ok[50001];
int merge(int x,int min[],int n)
 {
 int i,j;
 ok[0]=1;
 for(i=1;i<=x;i++)
  ok[i]=0;
 for(i=1;i<=n;i++)
  {
  for(j=0;j<=x;j++)
   if(ok[j]==1)
    ok[j+min[i]]=1;
  if(ok[x]==1)
   break;
  }
 return (ok[x]==0);
 }
int main()
 {
 int ax,n,a[1001],max,min[1001],k=0;
 int i,j;
 fscanf(f,"%d",&n);
 for(i=1;i<=n;i++)
  fscanf(f,"%d",&a[i]);
 for(i=1;i<n;i++)
  for(j=i+1;j<=n;j++)
   if(a[i]>a[j])
    {
    ax=a[i];
    a[i]=a[j];
    a[j]=ax;
    }
 for(i=1;i<=n;i++)
  if(merge(a[i],min,k))
   min[++k]=a[i];
 fprintf(g,"%d\n",k);
 for(i=1;i<=k;i++)
  fprintf(g,"%d\n",min[i]);
 return 0;
 }