Cod sursa(job #426865)

Utilizator SpiderManSimoiu Robert SpiderMan Data 27 martie 2010 13:01:20
Problema Economie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
#include <bitset>
using namespace std;

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

int sol[1005],V[1005];
bitset<50001> Din;
int N,cnt,vf,h;

int main()
{
    int i,j;

    f >> N;
    for (i=1;i<=N;i++)
        f >> V[i];
    sort(V+1,V+N+1);
    Din[0] = 1; //e clar
    for(i=1;i<=N;i++)
    if(Din[V[i]]==0)
       {
            sol[++cnt]=V[i]; //bagi in solutie daca nu se poate forma suma V[i]
            for(j=0;j<=V[N];j++) //cauti crescator sumele pe care le poti forma cu V[i]
            //pentru ca poti folosi o moneda de mai multe ori
                    if(Din[j] && j+V[i]<=V[N]) //pana nu depasesti valoarea maxima a monedelor
                                 Din[j+V[i]]=1; //le marchezi
       }
    g << cnt << "\n";
    for (i=1;i<=cnt;i++) g<< sol[i] << "\n";
    return 0;
}