Pagini recente » Monitorul de evaluare | Istoria paginii utilizator/georgianapurcaru | Cod sursa (job #2777881) | Cod sursa (job #2783255) | Cod sursa (job #111444)
Cod sursa(job #111444)
/* Ivan Nicolae - Infoarena */
/* Economie */
#include <stdio.h>
#include <string.h>
#define NMAX 1001
#define MMAX 50001
#define _fin "economie.in"
#define _fout "economie.out"
int i,j,n,m,A[NMAX],k;
int C[NMAX],Mark[MMAX];
void Quick(int li, int ls, int A[])
{
int i=li,j=ls,x=A[(li+ls)/2],y;
while (i<=j)
{
while (A[i]<x) i++;
while (A[j]>x) j--;
if (i<=j)
{
y=A[i]; A[i]=A[j]; A[j]=y;
i++; j--;
}
}
if (i<ls) Quick(i,ls,A);
if (li<j) Quick(li,j,A);
}
int main()
{
freopen(_fin,"r",stdin);
freopen(_fout,"w",stdout);
scanf("%d",&n);
int max=0;
for (i=1;i<=n;i++)
{
scanf("%d",&A[i]);
if (A[i]>max)
max=A[i];
}
Quick(1,n,A);
Mark[0]=1;
for (k=1;k<=n;k++)
{
if (!Mark[A[k]])
C[++C[0]]=A[k];
for (i=0;i<=max;i++)
if (Mark[i] && i+C[C[0]]<=max)
Mark[i+C[C[0]]]=1;
}
printf("%d\n",C[0]);
for (i=1;i<=C[0];i++)
printf("%d\n",C[i]);
fclose(stdin);
fclose(stdout);
return 0;
}