Cod sursa(job #3124971)

Utilizator speedy_gonzalesDuca Ovidiu speedy_gonzales Data 30 aprilie 2023 23:27:19
Problema Problema rucsacului Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>
#include <vector>
#include <map>
#include <cstring>
#include <fstream>
#include <sstream>
#include <string>
#include <algorithm>
#include <queue>
#include <cmath>
#include <set>
#include <unordered_map>
#include <stack>
#include <iomanip>
#include <random>

using namespace std;

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

void backtracking(vector<pair<int, int>> &array, vector<pair<int, int>> &path, vector<vector<pair<int, int>>> &ans,
                  int start) {
    ans.push_back(path);
    for (int i = start; i < array.size(); ++i) {
        path.push_back(array[i]);
        backtracking(array, path, ans, i + 1);
        path.pop_back();
    }
}

int main() {
    int n, g;
    fin >> n >> g;

    vector<pair<int, int>> array;
    for (int i = 0; i < n; ++i) {
        int w, p;
        fin >> w >> p;
        array.emplace_back(w, p);
    }

    vector<pair<int, int>> path;
    vector<vector<pair<int, int>>> ans;

    backtracking(array, path, ans, 0);

    int maxProfit = -1;
    for (auto &generatedArrays : ans) {
        int sumW = 0, sumP = 0;
        for (auto &element : generatedArrays) {
            sumP += element.second;
            sumW += element.first;
            if (sumW > g) {
                break;
            }
        }
        if (sumW <= g) {
            maxProfit = max(maxProfit, sumP);
        }
    }

    fout << maxProfit;

    return 0;
}