Cod sursa(job #3133713)

Utilizator GranderLisii Dan Grander Data 26 mai 2023 17:14:30
Problema Problema rucsacului Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <vector>
#include <map>
#include <fstream>

std::ifstream fin("rucsac.in");
std::ofstream fout("rucsac.out");
struct obiecte{
    int profit,greutate;
};
std::vector<obiecte> rucsac;
int N, G;
std::map<int, obiecte> used;

void bkt(int x, int &Pmax, int P_current, int G_current){
    if(x == N || G_current >= G){
        if(P_current > Pmax){
            Pmax = P_current;
        }
    } else {
        if(used.count(x) > 0);
        else
        {
            used.insert(std::pair<int,obiecte>(x,rucsac[x]));
            P_current += rucsac[x].profit;
            G_current += rucsac[x].greutate;
            for(int i = x; i < N; i++){
                bkt(i,Pmax,P_current,G_current);
            }
            used.erase(x);
        }
    }
}



int main(){
    fin >> N >> G;
    obiecte temp;
    for(int i = 0; i < N; i++){
        fin >> temp.greutate >> temp.profit;
        rucsac.push_back(temp);
    }
    int Pmax = -1;
    bkt(0,Pmax,0,0);
    fout << Pmax << std::endl;
    return 0;
}