我一直在努力解决以下动态编程问题。 想知道是否有人知道我的解决方案有什么问题。
给定一个整数n,指定您的总平板计数,返回可能的平板堆叠总数。有效的板堆叠是指每个层具有比其上方更多的板以获得稳定性的板堆叠。每个级别必须至少有一个盘子。
例如,如果n = 3,我们可以将它叠加一个有效的方式[2,1],所以答案是1
同样,如果n = 5,我们可以[4,1] [3,2],所以答案是2
在python中尝试解决方案
def main(n):
m = {}
m[1] = 1
m[2] = 1
m[3] = 1
m[4] = 1
return recurse(n, m)
def recurse(n, m):
if n in m: #Base case
return m[n]
sum = 0
for currP in range(n-1, 0, -1):
nextP = n-currP #next level plates
if nextP > currP: #no way to do this level
break
sum += recurse(nextP, map) #recursive step
m[n] = sum
return m[n]