Pagini recente » Cod sursa (job #3125815) | Cod sursa (job #1198763) | Cod sursa (job #1521194) | Cod sursa (job #620523) | Cod sursa (job #3210298)
#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;
}