Pagini recente » Cod sursa (job #170226) | Cod sursa (job #114411) | Cod sursa (job #145835) | Cod sursa (job #1180638) | Cod sursa (job #235757)
Cod sursa(job #235757)
#include <stdio.h>
#include <stdlib.h>
#define nmax 1001
#define smax 50001
long n,i,j;
long v[nmax];
long s[smax];
long sol[nmax];
long cati=0;
void citire(void)
{
freopen("economie.in","r",stdin);
scanf("%ld",&n);
for (i=1;i<=n;i++)
scanf("%ld",&v[i]);
}
int comparare(const void *a,const void *b)
{
if (*(long*)a>*(long*)b) return 1;
return 0;
}
void solve(void)
{
qsort(v,n+1,sizeof(long),comparare);
s[0]=1;
for (i=1;i<=n;i++)
if (s[v[i]]==0)
{
sol[++cati]=v[i];
for (j=0;j<=50000-v[i];j++)
if (s[j]) s[j+v[i]]=1;
}
}
void afisare(void)
{
freopen("economie.out","w",stdout);
long i;
printf("%ld\n",cati);
for (i=1;i<=cati;i++)
printf("%ld\n",sol[i]);
}
int main(void)
{
citire();
solve();
afisare();
return 0;
}