Разбейте список чисел на n кусков так, чтобы куски имели (близко к) равные суммы и сохраняли первоначальный порядок

Это не стандартная проблема разбиения, так как мне нужно поддерживать порядок элементов в списке.

Так, например, если у меня есть список

[1, 6, 2, 3, 4, 1, 7, 6, 4]

и я хочу два куска, тогда раскол должен дать

[[1, 6, 2, 3, 4, 1], [7, 6, 4]] 

на сумму 17 с каждой стороны. Для трех кусков результат будет

[[1, 6, 2, 3], [4, 1, 7], [6, 4]]

для сумм 12, 12 и 10.

Изменить для дополнительного объяснения

В настоящее время я делю сумму на количество кусков и использую ее в качестве цели, затем перебираю, пока не подойду к этой цели. Проблема заключается в том, что определенные наборы данных могут испортить алгоритм, например, пытаясь разделить следующее на 3:

[95, 15, 75, 25, 85, 5]

Сумма равна 300, цель равна 100. Первый фрагмент будет суммироваться до 95, второй - до 90, третий - до 110, а 5 будет «оставшимся». Добавление его туда, где оно должно быть, даст 95, 90, 115, где более «разумное» решение будет 110, 100, 90.

конец редактирования

Фон:

У меня есть список, содержащий текст (текст песни) различной высоты, и я хочу разделить текст на произвольное количество столбцов. В настоящее время я вычисляю высоту цели на основе общей высоты всех линий, но, очевидно, это непостоянная недооценка, которая в некоторых случаях приводит к неоптимальному решению (последний столбец значительно выше).

Ответы на вопрос(7)

Ваш ответ на вопрос