Pagini recente » Cod sursa (job #2869898) | Cod sursa (job #1204750) | Cod sursa (job #2207390) | Cod sursa (job #861440) | Cod sursa (job #284549)
Cod sursa(job #284549)
#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;
}