Я столкнулся с некоторыми аналогичными проблемами с этим в прошлом, и у меня все еще нет хорошей идеи, как решить эту проблему. Проблема заключается в следующем:Нужна идея для решения этого алгоритма головоломки
Вам предоставляется целочисленный массив с размером n < = 1000 и k < = n, который представляет собой число смежных подмассивов, которые вам нужно разделить на массив. Вы должны вывести минимум m, где m = max {s [1], ..., s [k]}, а s [i] - сумма i-го подмассива. Все целые числа в массиве составляют от 1 до 100. Пример:
Input: Output:
5 3 >> n = 5 k = 3 3
2 1 1 2 3
Разбиение массива на 2 + 1 | 1 + 2 | 3 минимизирует m.
Идея моей грубой силы заключалась в том, чтобы сделать первый субарейный конец в позиции i (для всех возможных i), а затем попытаться разбить остальную часть массива в k-1 подмассивах наилучшим образом. Однако это экспоненциальное решение и никогда не будет работать.
Итак, я ищу хорошие идеи для его решения. Если у вас есть один, скажите мне.
Благодарим за помощь.
Back-трекинг получит вы там. – Noldorin
Является ли это изменением проблемы с рюкзаком? http://en.wikipedia.org/wiki/Knapsack_problem – BlueMonkMN
@BlueMonkMN Я думаю, что эта проблема проще. См. Мой ответ, где я не использую динамическое программирование. Тем не менее, я не совсем уверен, что это действительно или быстрее. – toto2