Pagini recente » Monitorul de evaluare | Diferente pentru utilizator/funnystocky intre reviziile 109 si 110 | Istoria paginii utilizator/costelbijupesistem | Istoria paginii utilizator/deejayfreeak | Cod sursa (job #109780)
Cod sursa(job #109780)
#include<stdio.h>
FILE *f,*g;
long i,j,x,n,vmax,nrv,nrnr;
long a[1001],sol[1001];
char nou[50001],vechi[50001];
long poz(long li,long ls)
{
long t=0,i,j,aux;
i=li;
j=ls;
while(i<j)
{
if(a[i]>a[j])
{
aux=a[i];
a[i]=a[j];
a[j]=aux;
t=1-t;
}
if(t)
j--;
else
i++;
}
return i;
}
void quick(long li,long ls)
{
long k;
if(li<ls)
{
k=poz(li,ls);
quick(li,k-1);
quick(k+1,ls);
}
}
int main(void)
{
f=fopen("economie.in","r");
g=fopen("economie.out","w");
fscanf(f,"%ld",&n);
for(i=1;i<=n;i++)
{
fscanf(f,"%ld",&a[i]);
if(a[i]>vmax);
vmax=a[i];
}
quick(1,n);
nrv=0;
vechi[0]=1;
nou[0]=1;
for(i=1;i<=n;i++)
{
for(j=0;j<=vmax-a[i];j++)
if(nou[j]==1&&nou[j+a[i]]!=1)
nou[j+a[i]]=1;
nrnr=0;
for(j=1;j<=n;j++)
nrnr+=nou[a[j]];
if(nrnr>nrv)
{
nrv=nrnr;
x++;
sol[x]=a[i];
if(nrnr==n)
break;
for(j=1;j<=vmax;j++)
vechi[j]=nou[j];
}
else
for(j=1;j<=vmax;j++)
nou[j]=vechi[j];
}
fprintf(g,"%ld\n",x);
for(i=1;i<=x;i++)
fprintf(g,"%ld\n",sol[i]);
fclose(f);
fclose(g);
return 0;
}