动态编程:划分一组数字的方式数量

时间:2018-10-08 14:58:05

标签: python python-3.x algorithm

在阅读算法书籍时,我发现了以下练习。

  

给出一组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:“元组”对象不支持项目分配

我的问题:我该如何解决?我可以说这段代码应用了动态编程吗?

1 个答案:

答案 0 :(得分:1)

dp声明的末尾有一个逗号。这使其成为一个元组,而不是列表,并且元组不可修改。只需删除它,这是一个错字。