Недавно я узнал о технике динамического программирования, и я наткнулся на проблему, которую я не могу понять. Сначала вам дается список аргументов, и вам нужно делать суммы, как если бы вы их разрезали. Если список имеет только один элемент, вы не суммируете его. Если в нем больше, вы суммируете элементы и разрезаете их всеми возможными способами. Поэтому, если в списке есть n элементов, существует только n-1 способ разрезать его. Картина объяснит:Динамическое программирование не дает правильного ответа
я первый хотел подвести итог все sumable частей, и я ожидал, что результат 20 (11 + 9) (даже думал, что правильный ответ 9), но я думал, что это было бы хорошим началом. Но мой код возвращает номер 37, и я понятия не имею, почему. Что я делаю не так?
summ = 0
def Opt(n):
global summ
if len(n) == 1:
return 0
else:
summ += sum(n)
for i in range(1,len(n)):
summ += Opt(n[ :i ]) + Opt(n[ i: ])
return summ
print(Opt([ 1,2,3 ]))
Спасибо за ваше время и за любой ответ!
Почему вы используете глобальное? – cdarke
Кроме того, что именно «Опт» должен делать точно? Изображение не очень полезно.Я думаю, что должно быть 'min()' где-то («самая низкая сумма»), но я не понял ваш вопрос достаточно хорошо, чтобы предложить ответ –
В моем коде Opt должен вернуться 20 (вырезать списки, если у них больше чем один элемент и суммировать их) – TheTask1337