动态编程堆栈的板块

时间:2017-04-02 22:10:19

标签: python algorithm recursion dynamic-programming

我一直在努力解决以下动态编程问题。 想知道是否有人知道我的解决方案有什么问题。

给定一个整数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]

0 个答案:

没有答案