Cod sursa(job #804064)

Utilizator andunhillMacarescu Sebastian andunhill Data 28 octombrie 2012 19:44:51
Problema Economie Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<fstream>
#include<iostream>
#include<algorithm>
#include<ctime>
using namespace std;

clock_t start=clock();

ifstream f("economie.in");
ofstream g("economie.out");

int N, K;
int v[1008];
int sub_set[1008];

bool can[50009];

int main()
{   int i, sum, ind;

    f>>N;
    for(i = 1; i <= N; i++)
        f>>v[i];

    sort(v + 1, v + N + 1);
    ind = 1;

    while(1)
    {   sub_set[++K] = ind;
        can[v[ind]] = true;

        for(sum = v[ind]; sum <= v[N]; sum++)
        {   if(!can[sum]) continue;

            for(i = 1; i <= K; i++)
                can[sum + v[sub_set[i]]] = true;
        }
        for(ind; can[v[ind]] && ind <= N; ind++);
        if(ind > N) break;
    }
    g<<K<<'\n';
    for(i = 1; i <= K; i++)
        g<<v[sub_set[i]]<<'\n';

    cout << 1.0*(clock()-start)/(1.0*CLOCKS_PER_SEC) << '\n';
    f.close();
    g.close();
    return 0;
}