Cod sursa(job #2366355)

Utilizator Cristian25Cristian Stanciu Cristian25 Data 4 martie 2019 19:44:02
Problema Problema rucsacului Scor 10
Compilator cpp-64 Status done
Runda pregatire_cls12_oji Marime 0.95 kb
#include <fstream>
#define len 5001
#define x first
#define y second

using namespace std;

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

typedef unsigned long long ull;

pair<unsigned, unsigned> v[len];

unsigned N, G, W, P, sol[len];
ull smax;

bool ebun(unsigned k)
{
    ull s = 0;
    for(unsigned i = 1; i <= k;)
        s += v[sol[i++]].x;
    return s <= G;
}

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

void back(unsigned k)
{
    for(unsigned i = sol[k - 1] + 1; i <= N; ++i)
    {
        sol[k] = i;
        if(ebun(k))
        {
            smax = max(smax, sum(k));
            if(k < N)
                back(k + 1);
        }
    }
}

int main()
{
    in >> N >> G;
    for(unsigned i = 1; i <= N;)
    {
        in >> W >> P;
        v[i++] = make_pair(W, P);
    }
    back(1);
    out << smax;
    return 0;
}