Cod sursa(job #3254963)

Utilizator AndreasBossGamerBaragau Andreas AndreasBossGamer Data 9 noiembrie 2024 10:48:36
Problema Problema rucsacului Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

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

struct ceva
{
    int valoare, greutate;

    bool operator<(const ceva& temp) const
    {
        return (valoare/(float)greutate) > (temp.valoare/(float)temp.greutate);
    }
};

int n, greutateMaxima;
vector<ceva> v;
vector<int> sumePart;

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

bool iesi(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(iesi(poz, greutateCurenta, valoareCurenta))
        return;

    bkt(poz+1, greutateCurenta, valoareCurenta);
    bkt(poz+1, greutateCurenta + v[poz+1].greutate, valoareCurenta + v[poz+1].valoare);
}

int main()
{
	cin >> n >> greutateMaxima;
	v.resize(n+1);
	for(int i = 1;i<=n;i++) cin >> v[i].greutate >> v[i].valoare;
	sort(v.begin() + 1, v.begin() + n + 1);
	cout << "\n\n";
	for(int i = 1;i<=n;i++) cout << v[i].valoare << " "<<v[i].greutate << '\n';
	bkt(0, 0, 0);
	cout << sol;
}