Cod sursa(job #2366466)

Utilizator Cristian25Cristian Stanciu Cristian25 Data 4 martie 2019 20:19:27
Problema Energii Scor 15
Compilator cpp-64 Status done
Runda pregatire_cls12_oji Marime 1.23 kb
#include <fstream>
#define len 1002
#define x first
#define y second

using namespace std;

ifstream in("energii.in");
ofstream out("energii.out");

pair<unsigned, unsigned> v[len];

unsigned G, W, sol[len];
unsigned long long cmin;
bool exista;

bool esol(unsigned k)
{
    unsigned long long sum = 0;
    for(unsigned i = 1; i <= k;)
        sum += v[sol[i++]].x;
    return sum >= W;
}

unsigned long long cost(unsigned k)
{
    unsigned long long sum = 0;
    for(unsigned i = 1; i <= k;)
        sum += v[sol[i++]].y;
    return sum;
}

void back(unsigned k)
{
    for(unsigned i = sol[k - 1] + 1; i <= G; ++i)
    {
        sol[k] = i;
        bool cond = esol(k);
        if(cond)
        {
            exista |= 1;
            unsigned long long c = cost(k);
            cmin = (!cmin ? c : min(cmin, c));
        }
        else if(k < G && !cond)
            back(k + 1);
    }
}

int main()
{
    in >> G >> W;
    for(unsigned i = 0; i != G;)
    {
        unsigned E, C;
        in >> E >> C;
        v[++i] = {E, C};
    }
    back(1);
    switch(exista) {
    case true:
        out << cmin;
        break;
    case false:
        out << -1;
        break;
    }
    return 0;
}