Pagini recente » Cod sursa (job #1645813) | Cod sursa (job #1655143) | Cod sursa (job #2361011) | Cod sursa (job #250809) | Cod sursa (job #3124971)
#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;
}