【发布时间】:2016-02-06 16:54:18
【问题描述】:
我最近发现了一种叫做动态编程的技术,我偶然发现了一个我无法弄清楚的问题。一开始你会得到一个参数列表,你需要对它进行求和,就好像你正在切割它一样。如果列表只有一个元素,则不要对其求和。如果它有更多,则将元素相加并以各种可能的方式对其进行切割。因此,如果列表有 n 个元素,则只有 n-1 种方法可以对其进行剪切。图片说明:
我首先想总结所有可求和的部分,我期望结果为 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 ] ) )
感谢您的宝贵时间和任何回答!
【问题讨论】:
-
你为什么使用全局?
-
另外,
Opt到底应该做什么?图片真的没有帮助。我认为某处应该有一个min()(“最低和”),但我对您的问题理解得不够好,无法提出答案 -
在我的代码中 Opt 应该返回 20(如果列表有多个元素,则剪切列表并将它们相加)
-
编写一个全局变量并同时返回它肯定既没有必要也无助于清楚地表达代码背后的想法。
标签: python dynamic-programming