Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "ReadWriter.h"
- //vector, string, iostream, algorithm included in "ReadWriter.h"
- using namespace std;
- //Можно добавлять любые вспомогательные методы и классы для решения задачи.
- //Задача реализовать этот метод (жадный алгоритм)
- //param N - количество предметов
- //param W - ограничения на вес рюкзака
- //param items - массив размера N, с предметами - first = вес, second = стоимость
- //param res - вектор результатов (предметы, которые надо взять)
- bool myComparator(const pair<int, int>& right, const pair<int, int>& left)
- {
- if((double)right.second / right.first == (double)left.second / left.first)
- return right.first > left.first;
- return (double)right.second / right.first > (double)left.second / left.first;
- }
- void solve(int N, int W, pair<int, int> *items, vector<pair<int, int>> &res)
- {
- sort(items, items + N, myComparator);
- int i = 0, w = W;
- while(i < N)
- {
- if(items[i].first <= w)
- {
- w -= items[i].first;
- res.push_back(items[i]);
- }
- ++i;
- }
- }
- int main(int argc, const char * argv[])
- {
- ReadWriter rw;
- int N = rw.readInt(); //количество предметов
- int W = rw.readInt(); //ограничения на вес рюкзака
- //структура массив pair выбрана, так как известно количество элементов, и у объекта всего 2 характеристики
- //first = вес(weight), second = стоимость (cost)
- //Можно переложить данные в любую другую удобную струтуру
- //Внимание(!) данные не упорядочены, но можно это сделать если вам требуется
- pair<int, int>* arr = new pair<int, int>[N];
- rw.readArr(arr, N);
- //структура вектор pair выбрана, так как неизвестно количество элементов, и у объекта всего 2 характеристики
- //результат, также first = вес(weight), second = стоимость (cost)
- vector<pair<int, int>> res;
- solve(N, W, arr, res);
- int sumCost = 0, sumWeight = 0;
- for (int i = 0; i < res.size(); i++)
- {
- sumWeight += res[i].first;
- sumCost += res[i].second;
- }
- //записываем ответ в файл
- rw.writeInt(sumCost);
- rw.writeInt(sumWeight);
- rw.writeInt(res.size());
- rw.writeVector(res);
- delete[] arr;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement