Михаил Федотов, все верно, решение сводится к перебору на втором шаге. На первом шаге мы сильно урезаем количество вариантов перебора, применяя ограничения.
Вы абсолютно верно поняли, осталось перебрать все возможные значения k.
Количество вариантов перебора не зависит напрямую от количества критериев.
Скорее, ужесточение условий с ростом количества критериев будет приводить к уменьшению разрыва между max(n) и min(n) (но не обязательно).
Если прикинуть, то, в худшем случае количество операций при переборе будет достигать произведения всех максимальных значений k, умноженного на количество критериев.
В этот алгоритм можно засунуть еще множество оптимизаций.
1. Например, мы варьируем коэффициент k4, одз которого от 0 до 15. При k4 = 6 мы понимаем, что перебрали по какому-то критерию. Следовательно, для k4 = 7...15 мы уже не проверяем, а оставляем k4=5 и переходим к варьированию k5,
Тут важно понимать, как это проиходит (нумерация справа налево, чтобы провести аналогих с числами).
Пусть у нас есть 4 разных записи. Зададим их макс. k: k1=2, k2=4, k3=2, k4=5.
(запись справа налево, т.е. k4k3k2k1):
0000
0002
0010
0011
...
5241
5242
2. Необязательно сопоставлять на каждом шаге вектор характеристик целиком с заданными ограничениями. Достаточно обнаружить первое нарушение органичений, чтобы понять, что такое решение нам не подходит.
Михаил Федотов, виноват я, это я невнимательно прочитал задачу и предложил не совсем подходящее решение.
Давайте более детально определим условия.
1) Каждый элемент из items может браться неограниченное количество раз?
2) Критерии задаются строго? То есть сумма всех первых критериев выборки ровно 20, сумма всех третьих ровно 30, а суммарная стоимость строго меньше 100?
3) Если можно найти два качественно эквивалентных решения (одинаковая стоимость и суммарное значения параметров), но отличается количество записей (например, (10,15,20) +(10,15,20) = (20,30,40) или (5,5,5)+(5,5,5)+(10,20,30) = (20,30,40) есть ли приоритет, какое решение выбрать - с большим или меньшим количеством записей?
Если задача такая, как я ее описал, то я ее решал и могу подсказать решение.
seeklay, не согласен.
На 3 и 4 курсе физмата писали высоконагруженные вероятностные СМО на питоне, писал на нем коммерческие заказы. ЯП не определяет мастерство программиста. Все-таки это больше к знанию алгоритмов, паттернов, архитектур.
Nodejs это платформа с очень мощной системой асинхронности, PHP - язык, который прикручивается к какому-то серверу. И никто не мешает создать однопоточный сервер с использованием PHP модуля. Так что это не очень аргумент.
Если мы говорим про хайлоад, то с такими доводами все сервера можно писать на чистых сях.
UPD. Да и PHP едва ли сложнее питона. Они оба дичайше просты)
Comrues, повесить на страницу addEventListener, и проверять, что !e.target.classList.contains('item') и удалять со всех элементов item класс dropdown по этому событию