Advertisement
Guest User

Untitled

a guest
May 23rd, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.77 KB | None | 0 0
  1. #include "ReadWriter.h"
  2. //vector, string, iostream, algorithm included in "ReadWriter.h"
  3.  
  4. using namespace std;
  5.  
  6. //Можно добавлять любые вспомогательные методы и классы для решения задачи.
  7.  
  8. //Задача реализовать этот метод (жадный алгоритм)
  9. //param N - количество предметов
  10. //param W - ограничения на вес рюкзака
  11. //param items - массив размера N, с предметами - first = вес, second = стоимость
  12. //param res - вектор результатов (предметы, которые надо взять)
  13.  
  14. bool myComparator(const pair<int, int>& right, const pair<int, int>& left)
  15. {
  16. if((double)right.second / right.first == (double)left.second / left.first)
  17. return right.first > left.first;
  18.  
  19. return (double)right.second / right.first > (double)left.second / left.first;
  20. }
  21.  
  22. void solve(int N, int W, pair<int, int> *items, vector<pair<int, int>> &res)
  23. {
  24. sort(items, items + N, myComparator);
  25.  
  26. int i = 0, w = W;
  27.  
  28. while(i < N)
  29. {
  30. if(items[i].first <= w)
  31. {
  32. w -= items[i].first;
  33. res.push_back(items[i]);
  34. }
  35. ++i;
  36. }
  37. }
  38.  
  39. int main(int argc, const char * argv[])
  40. {
  41. ReadWriter rw;
  42. int N = rw.readInt(); //количество предметов
  43. int W = rw.readInt(); //ограничения на вес рюкзака
  44.  
  45. //структура массив pair выбрана, так как известно количество элементов, и у объекта всего 2 характеристики
  46. //first = вес(weight), second = стоимость (cost)
  47. //Можно переложить данные в любую другую удобную струтуру
  48. //Внимание(!) данные не упорядочены, но можно это сделать если вам требуется
  49. pair<int, int>* arr = new pair<int, int>[N];
  50. rw.readArr(arr, N);
  51.  
  52. //структура вектор pair выбрана, так как неизвестно количество элементов, и у объекта всего 2 характеристики
  53. //результат, также first = вес(weight), second = стоимость (cost)
  54. vector<pair<int, int>> res;
  55. solve(N, W, arr, res);
  56.  
  57. int sumCost = 0, sumWeight = 0;
  58. for (int i = 0; i < res.size(); i++)
  59. {
  60. sumWeight += res[i].first;
  61. sumCost += res[i].second;
  62. }
  63. //записываем ответ в файл
  64. rw.writeInt(sumCost);
  65. rw.writeInt(sumWeight);
  66. rw.writeInt(res.size());
  67. rw.writeVector(res);
  68.  
  69. delete[] arr;
  70. return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement