Python 动态规划:划分一组数字的多种方法

Python 动态规划:划分一组数字的多种方法,python,python-3.x,algorithm,Python,Python 3.x,Algorithm,在阅读算法书时,我发现了以下练习 给定一组n个元素,编写一个算法来查找 划分它的方法。 示例:当n=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 s

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

给定一组n个元素,编写一个算法来查找 划分它的方法。 示例:当n=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))
def方式(n):
dp=[0]*(n+1),
sum=[0]*(n+1)##声明2个大小为n+1的数组
dp[0]=0
dp[1]=1
和[0]=0
和[1]=1
lastcalc=1#上次计算的var
对于范围(2,n)内的i:
如果lastcalc
但是,代码不起作用,给了我一个错误

TypeError:“tuple”对象不支持项分配


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

dp
的声明末尾有一个逗号。这使它成为一个元组,而不是一个列表,并且元组是不可修改的。把它去掉,这是个打字错误

删除
dp=[0]*(n+1)中的尾随逗号,
@aranfey,谢谢。它现在可以工作了,但是方法(2)给了我0。从这个问题来看,应该是2。请发布一个关于这个的新问题。