Cod sursa(job #141909)

Utilizator perticas_catalinperticas catalin perticas_catalin Data 23 februarie 2008 20:37:30
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
//economie
#include<stdio.h>
FILE*fin=fopen("economie.in","r");
FILE*fout=fopen("economie.out","w");
#define max 50001
int s[1001],e[max],v[max],r[1001];
int main()
{
  int n,vmax=0,dim=0,nr,i,j;
  fscanf(fin,"%d",&n);
  for(i=1;i<=max;i++)
    e[i]=0;
  for(i=1;i<=n;i++)
  {
    fscanf(fin,"%d",&nr);
    e[nr]=1;
    if(nr>vmax) vmax=nr;
  }
  fclose(fin);
  n=0;nr=0;
  for(i=1;i<=vmax;i++)
  if(e[i])
  {
    n++;s[n]=i;
    v[i]=0;
  }
  v[0]=1;
  for(i=1;i<=n;i++)
    if(v[s[i]]==0)
    {
      for(j=s[i];j<=vmax;j++)
	if(!v[j]&&v[j-s[i]])
	{
	  v[j]=1;
	  if(e[j]==1) nr++;
	}
      dim++;
      r[dim]=s[i];
      if(nr==n) break;
    }
  fprintf(fout,"%d\n",dim);
  for(i=1;i<=dim;i++)
    fprintf(fout,"%d\n",r[i]);
  fclose(fout);
  return 0;
}