Cod sursa(job #2970596)

Utilizator AndreiBadAndrei Badulescu AndreiBad Data 25 ianuarie 2023 16:31:32
Problema Problema rucsacului Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
//
//  main.cpp
//  Problema rucsacului (infoarena)
//
//  Created by Andrei Bădulescu on 25.01.23.
//

#include <algorithm>
//#include <iostream>
#include <fstream>

using namespace std;

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

const int N = 5000;
const int G = 10000;

struct item {
    int reward, weight;
};

item items[N + 1];
int profit[G + 1];
int n, maxG;

bool comparisonArgument(item lhs, item rhs) {
    return lhs.weight < rhs.weight;
}

int main() {
    cin >> n >> maxG;

    for (auto i = 1; i <= n; i++) {
        cin >> items[i].weight;
        cin >> items[i].reward;
    }

    sort(items + 1, items + n + 1, comparisonArgument);

    for (auto i = 1; i <= maxG; i++) {
        profit[i] = -1;
    }

    for (auto i = 1; i <= n; i++) {
        for (auto j = maxG - items[i].weight; j >= 0; j--) {
            if (profit[j] != -1 && profit[j] + items[i].reward > profit[j + items[i].weight]) {
                profit[j + items[i].weight] = profit[j] + items[i].reward;
            }
        }
    }

    int result = 0;

    for (auto i = 1; i <= maxG; i++) {
        result = max(result, profit[i]);
    }

    cout << result;
    return 0;
}