#algorithm
#алгоритм
Вопрос:
У меня простая алгоритмическая проблема.
- У меня есть набор положительных целых чисел
S
и положительное максимальное целое числоi
. - Допустим, сумма
S
(или подмножествоS
) является суммой его элементов. - Мне нужно найти подмножество
s
изS
, сумма которого не превышаетi
и является «максимально суммирующей», что означает, что никакое другое подмножествоS
не имеет большей суммы, чемs
без превышенияi
.
Тривиальное решение, которое я придумал, состоит в том, чтобы просмотреть каждый набор степенного набора S
и суммировать целые числа, отслеживая набор с искомыми свойствами, но этот алгоритм, очевидно, экспоненциальный.
Должно быть хорошо известное название для этой проблемы, поскольку я не думаю, что я первый, кто столкнулся с этой необходимостью. Может ли кто-нибудь мне помочь?
Комментарии:
1. en.wikipedia.org/wiki/Knapsack_problem
2. Одним из подходов к решению «проблемы с рюкзаком» было бы динамическое программирование: en.wikipedia.org/wiki/Dynamic_programming
3. @user2357112 Вы должны преобразовать это в ответ.
Ответ №1:
Решите задачу о сумме подмножеств для вашего набора, используя динамическое программирование.
Затем сканируйте заполненную таблицу от i-й записи до меньших значений, пока не найдете ненулевую запись (т. Е. Такая сумма существует). Это наибольшая сумма подмножеств, которая не превышает заданного значения.