Cod sursa(job #3210298)

Utilizator CRazvaN6Cutuliga Razvan CRazvaN6 Data 5 martie 2024 21:26:36
Problema Problema rucsacului Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm> // Adaugă biblioteca algorithm pentru sortare

using namespace std;

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

int n, gMax;
int ans;

// Structură pentru a reprezenta obiectele
struct Object {
    int weight;
    int value;
    double ratio;
};

// Funcție pentru a compara două obiecte în funcție de raportul dintre valoare și greutate
bool compareObjects(const Object &a, const Object &b) {
    return a.ratio > b.ratio; // Sortare descrescătoare după raport
}

int main() {

    f >> n >> gMax;

    vector<Object> objects(n);
    vector<int> T(gMax + 1, 0);

    // Citirea obiectelor și calcularea raportului dintre valoare și greutate
    for(int i = 0; i < n; ++i){
        f >> objects[i].weight >> objects[i].value;
        objects[i].ratio = (double)objects[i].value / objects[i].weight;
    }

    // Sortarea obiectelor în ordine descrescătoare după raportul dintre valoare și greutate
    sort(objects.begin(), objects.end(), compareObjects);

    for(int i = 0; i < n; ++i){
        for(int j = gMax; j >= objects[i].weight; --j){
            T[j] = max(T[j], T[j - objects[i].weight] + objects[i].value);
            ans = max(ans, T[j]);
        }
    }
    g << ans;

    return 0;
}