Наткнулся тут на такую задачку:
Видео игра рендерит объекты, но не все, а только ближайшие к игроку и на сколько хватит мощности видеокарты.
Расстояние объектов от игрока находится в векторе D, сложность рендеринга в векторе C. Расстояние объектра и его сложность находятся под одним индексом. Мощность видеокарты задается параметром P.
int render(vector<int> D, vector<int> C, int P);
Рендерить объекты можно только по порядку. Т.е. чтобь отрендерить объект 3, надо чтобы 2 и 1 уже были отрендерены.
Надо найти наибольшее кол-во объектов, которые можно отрендерить на заданной мощности видеокарты.
Пример.
D = {2,5,1,3}
C = {2,3,3,4}
P = 6
В данном примере мы можем отрендерить только 2 объекта, D[2] со сложностью 3 и D[0] со сложностью 2: 3 + 2 <= 6.
Надеюсь, доступно объяснил.
Я решал на C++ так: засунул всё это дело в std::map<int, multiset> с ключами из D и валуе multiset со значениями из C, затем шел по мапе и суммировал сложности рендеринга до тех пор, пока они <= P.
Multiset нужен потому что у объектов может быть равное расстояние до игрока, но разные сложности.
Автосудья сказал, что 100% корректно, но по эффективности 1 из 4. Я так понял (возможно неверно), комплексити моего решения O(nlogn).
Есть идеи, как решать эту проблему эффективнее?