Cod sursa(job #3254933)

Utilizator AndreasBossGamerBaragau Andreas AndreasBossGamer Data 9 noiembrie 2024 10:29:34
Problema Problema rucsacului Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <vector>

using namespace std;

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

int n, greutateMaxima;
vector<int> greutate, valoare;

vector<bool> luat;
int sol = -1;

bool iesiInPLM(int poz, int greutateCurenta, int valoareCurenta)
{
    if(greutateCurenta > greutateMaxima)
        return true;

    if(poz == n)
    {
        sol = max(sol, valoareCurenta);
        return true;
    }

    return false;
}

void bkt(int poz, int greutateCurenta, int valoareCurenta)
{
    if(iesiInPLM(poz, greutateCurenta, valoareCurenta))
        return;

        //cout << poz << " " << luat[poz] << "\n";
    luat[poz+1] = false;
    bkt(poz+1, greutateCurenta, valoareCurenta);
    luat[poz+1] = true;
    bkt(poz+1, greutateCurenta + greutate[poz+1], valoareCurenta + valoare[poz+1]);
}

int main()
{
	cin >> n >> greutateMaxima;
	luat.resize(n+1, false);
	greutate.resize(n+1);
	valoare.resize(n+1);
	for(int i = 1;i<=n;i++) cin >> greutate[i] >> valoare[i];
	bkt(0, 0, 0);
	cout << sol;
}