Pagini recente » Cod sursa (job #3166628) | Cod sursa (job #3178988) | Cod sursa (job #2808526) | Cod sursa (job #1375362) | Cod sursa (job #110544)
Cod sursa(job #110544)
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
#define in "economie.in"
#define out "economie.out"
#define dim 1001
int N;
int A[dim];
vector<int> L;
vector<int>::iterator it;
int P[50*dim];
bool Sel[50*dim];
int main()
{
bool ok = 0;
int maxim = 0, size = 0, tsize = 0;
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%d", &N);
for ( int i = 1; i <= N; i++ )
{
scanf("%d", &A[i]);
if ( maxim < A[i] ) maxim = A[i];
}
sort(A+1,A+N+1);
L.push_back(A[1]);
P[0] = 0;
for ( int k = 1; A[1]*k <= maxim; k++ ) Sel[A[1]*k] = 1, size++, P[size] = A[1]*k;
tsize = size;
for ( int i = 2; i <= N; i++ )
{
if ( !Sel[A[i]] )
{
L.push_back(A[i]);
for ( int j = 0; j <= size; j++ )
for ( int k = 1; P[j]+A[i]*k <= maxim; k++ )
{
if ( !Sel[P[j]+A[i]*k] ) Sel[P[j]+A[i]*k] = 1, tsize++, P[tsize] = P[j]+A[i]*k;
}
size = tsize;
}
}
printf("%d\n", L.size() );
for ( it = L.begin(); it != L.end(); it++ )
printf("%d\n", *it );
}