Я задал этот вопрос на StackOverflow , но я думаю, что это более подходящее место.
Это проблема из курса Введение в алгоритмы :
У вас есть массив с положительными целыми числами (массив не нужно сортировать или элементы уникальны). Предложите алгоритм , чтобы найти наибольшую сумму элементов, которая делится на .
Пример: . Ответ (с элементами )
Относительно легко найти его в используя динамическое программирование и сохраняя наибольшую сумму с остатком .
Кроме того, если мы ограничим внимание последовательной последовательностью элементов, легко найти оптимальную такую последовательность за времени, сохраняя частичные суммы по модулю : let , для каждого остатка запомните наибольший индекстакой чтоS [j] \ эквивалента r \ pmod {n}, а затем для каждогоiрассмотримS [j] -S [i],гдеjиндекс, соответствующий .
Но есть ли -временное решение для общего случая? Любые предложения будут оценены! Я считаю, что это имеет отношение к линейной алгебре, но я не уверен, что именно.
Или же это можно сделать за ?