Algorithm n个楼梯的最大台阶总数

Algorithm n个楼梯的最大台阶总数,algorithm,dynamic-programming,Algorithm,Dynamic Programming,这是一个家庭作业问题,它是DP,但它不是一个“有多少种方法可以到达第n级问题” 相反,在这个问题中,每个楼梯台阶都被分配了一个从-10000到10000的数字,例如,我有一些台阶,比如-1 2 1,我必须找到最大的总和,同时每次能够上一个台阶或跳过一个台阶。在这个例子中,答案是3,因为我可以跳过第一步,然后只看楼梯的其余部分 我注意到,我总是可以删除最后一步,因为我必须在它的任何一步 我怎样才能用动态编程的方式来做呢?我在每一步都能找到最大的总和吗?只是一个线索: 假设您想要到达步骤n。您可以从

这是一个家庭作业问题,它是DP,但它不是一个“有多少种方法可以到达第n级问题”

相反,在这个问题中,每个楼梯台阶都被分配了一个从-10000到10000的数字,例如,我有一些台阶,比如
-1 2 1
,我必须找到最大的总和,同时每次能够上一个台阶或跳过一个台阶。在这个例子中,答案是
3
,因为我可以跳过第一步,然后只看楼梯的其余部分

我注意到,我总是可以删除最后一步,因为我必须在它的任何一步

我怎样才能用动态编程的方式来做呢?我在每一步都能找到最大的总和吗?

只是一个线索:

假设您想要到达步骤n。您可以从步骤n-2或n-1开始


因此,除了ElKamina的答案之外,请记住,无论您在任何阶段(向前一步或两步)选择做什么,第三项都是可以到达的…

设置一个整数数组(或long或任何可以容纳正负10000*n的值),称为
sum[n]
,如果您站在步骤
n
上,则可能的最大金额。请注意,
sum[0]=步骤[0]
是给定数组的第0个元素,但是
sum[1]=max{0+步骤[1],sum[0]+步骤[1]}
因为您可以直接从地板或通过第0个步骤到达步骤1。现在为
求和[2]
算出一个类似的公式,并进行推广。然后依次计算
sum[i]


我不认为你可以“去掉最后一步”。你可能不得不踩它,你可以避免它,无论什么是最好的。不过,您可能希望引入一个值为0的假最后一步。

您知道的动态规划就是要提出正确的问题

此处应以示例提问的问题:

a=[-5,-2,1,3]

如果您选择值为1的2步(数组索引从零开始),您可以得到的最大值是多少

让我们将f[2]定义为在两步之前可以得到的最大值。 所以你有选择;你要么踩上去,要么不踩上去

If (step on 2 step in array index i.e 1)
    you can also step on previous step i.e -2 or skip the previous step
    if (you skip the previous step i.e -2)
        you need to step on previous to previous step i.e -5
从上面你可以看到

   f[2] = max(a[2] + a[1] or a[2] + a[0])
我也在学习,所以我不确定下面的说法是否正确

F[n]=max(F[n-1]+a[n],F[n-2]+a[n])

F[n]=a[n]+max(F[n-1],F[n-2])
是对等式的简化。