Cod sursa(job #110544)

Utilizator cos_minBondane Cosmin cos_min Data 26 noiembrie 2007 22:06:54
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#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 );
}