Algorithm 使用动态规划的可能楼梯

Algorithm 使用动态规划的可能楼梯,algorithm,dynamic-programming,Algorithm,Dynamic Programming,对于URL中提到的楼梯问题 我们能在线性时间O(k)中求解它吗,其中k是可能的最大步长?我觉得使用下面的方法缺少一些逻辑 有什么建议吗 下面是我已经实现的代码: def answer(n): steps = determine_steps(n) x = ((n -1) - n/steps) * ((n-2) - n/steps + 1) #Minimum of two stair case for i in range(3, step

对于URL中提到的楼梯问题

我们能在线性时间O(k)中求解它吗,其中k是可能的最大步长?我觉得使用下面的方法缺少一些逻辑

有什么建议吗

下面是我已经实现的代码:

    def answer(n):
        steps = determine_steps(n)
        x = ((n -1) - n/steps) * ((n-2) - n/steps + 1)  #Minimum of two stair case
        for i in range(3, steps):
            x = x * ((n-i)/i)    #Stairs from 3 can go from minimum height 0 to max (n-i)/i
        return x


    def determine_steps(n):
        """Determine no of steps possible"""
        steps = 1;
        while (steps * steps + steps) <= 2 * n:
            steps = steps + 1
        return steps - 1

    #print answer(212)
    print answer(212)
def应答(n):
步骤=确定步骤(n)
x=((n-1)-n/步)*((n-2)-n/步+1)#至少两个楼梯
对于范围内的i(3步):
x=x*((n-i)/i)#从3开始的楼梯可以从最小高度0到最大高度(n-i)/i
返回x
def确定步骤(n):
“”“确定可能的步骤数”“”
步骤=1;

而(步骤*步骤+步骤)假设,您有一个函数,它有两个参数,一个是
left
,它是剩余砖块的数量,另一个是
curr
,它是您所在步骤的当前高度。现在,在任何步骤中,您都有两个选项。第一个选项是通过添加一块砖来增加当前台阶的高度,即
rec(left-1,curr+1)
,第二个选项是创建一个高度应大于
curr
,即
rec(left-curr-1,curr+1)
(您创建了一个高度台阶
curr+1
)。现在,
left
永远不能是负数,因此
如果left
k
是什么?我在链接中看不到它。另外,你能解释一下你提到的方法吗?K=对于给定的n块砖,最大可能的步骤数…是的,我可以在你的问题中读到,你提到的方法是什么?:)例如,考虑最左边的步骤,它不能低于N/K,并且不能具有大于N-1的高度。因此,对于每一步,我们都会计算出从可能的最小高度可以增长到的可能高度。如果你包含原始问题的文本而不是链接(稍后可能会断开),并且包含一些关于你尝试的方法和卡住的地方的详细信息,那么这个问题更有可能保持开放状态。
# your code goes here
dp = [ [-1]*501 for i in range(501) ]

def rec(left, curr):
    if left<0:
        return 0
    if left==0:
        return 1
    if dp[left][curr] !=-1:
        return dp[left][curr]
    dp[left][curr] = rec(left-1, curr+1) + rec( left-curr-1, curr+1)
    return dp[left][curr]

print ( rec(212-1,1) - 1 )