Cod sursa(job #3232553)

Utilizator marknt20Litoiu Marc-Adrian marknt20 Data 30 mai 2024 20:22:29
Problema Problema rucsacului Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
using namespace std;

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

struct Obiect {
    int profit, greutate;
};

int maxProfit;
int N, G;
Obiect obiecte[10000];

// Funcția de backtracking
void knapsackBacktrack(int index, int currentProfit, int currentWeight) {
    // Dacă am depășit greutatea maximă, nu continuăm
    if (currentWeight > G) {
        return;
    }

    // Actualizăm profitul maxim dacă e cazul
    if (currentProfit > maxProfit) {
        maxProfit = currentProfit;
    }

    // Dacă am procesat toate obiectele, ne oprim
    if (index == N) {
        return;
    }

    // Alegem să nu includem obiectul curent
    knapsackBacktrack(index + 1, currentProfit, currentWeight);

    // Alegem să includem obiectul curent
    knapsackBacktrack(index + 1, currentProfit + obiecte[index].profit, currentWeight + obiecte[index].greutate);
}

int main() {
    f >> N >> G;

    for (int i = 0; i < N; i++) {
        f >> obiecte[i].greutate >> obiecte[i].profit;
    }

    maxProfit = 0;
    knapsackBacktrack(0, 0, 0);

    g<< maxProfit << endl;

    return 0;
}