在阅读算法书籍时,我发现了以下练习。
给出一组n个元素,编写一个算法,该算法可以找到 分区的方式。 示例:当n = 2时,有2种方法将集合分割成( 包含一个元素的两个集合,或者分为原始集合和空集合。
我没有使用算法,而是使用动态编程尝试了python代码。
def ways(n):
dp = [0]*(n+1),
sum = [0]*(n+1) ## declaring 2 arrays of n+1 size
dp[0] = 0
dp[1] = 1
sum[0] = 0
sum[1] = 1
lastcalc = 1 # last calculated var
for i in range (2,n):
if lastcalc < i/2 :
for j in range (lastcalc, i/2):
sum[j] = sum[j-1] + dp[j]
lastcalc = (i/2) # update the lastcalculated variable
dp[i] = sum[i/2]
return dp[n]
print(ways(2))
但是,代码无法正常工作并给我一个错误。
TypeError:“元组”对象不支持项目分配
我的问题:我该如何解决?我可以说这段代码应用了动态编程吗?
答案 0 :(得分:1)
dp
声明的末尾有一个逗号。这使其成为一个元组,而不是列表,并且元组不可修改。只需删除它,这是一个错字。