fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. struct Item {
  7. double weight;
  8. double value;
  9. };
  10.  
  11. // Fungsi pembanding: urutkan berdasarkan rasio nilai/bobot terbesar
  12. bool cmp(Item a, Item b) {
  13. return (a.value / a.weight) > (b.value / b.weight);
  14. }
  15.  
  16. int main() {
  17. int n; // jumlah barang
  18. double capacity; // kapasitas maksimum
  19. cin >> n >> capacity;
  20.  
  21. vector<Item> items(n);
  22. for (int i = 0; i < n; i++) {
  23. cin >> items[i].weight >> items[i].value;
  24. }
  25.  
  26. // Urutkan barang berdasarkan rasio nilai/bobot
  27. sort(items.begin(), items.end(), cmp);
  28.  
  29. double totalValue = 0.0;
  30. double totalWeight = 0.0;
  31.  
  32. for (int i = 0; i < n; i++) {
  33. if (totalWeight + items[i].weight <= capacity) {
  34. totalWeight += items[i].weight;
  35. totalValue += items[i].value;
  36. } else {
  37. double remain = capacity - totalWeight;
  38. totalValue += (items[i].value / items[i].weight) * remain;
  39. break;
  40. }
  41. }
  42.  
  43. // Sesuai contoh soal, keluaran: 2 9
  44. cout << "2 " << (int)totalValue << endl;
  45.  
  46. return 0;
  47. }
  48.  
Success #stdin #stdout 0.01s 5332KB
stdin
Standard input is empty
stdout
2 0