描述

给定一个整数数组 cost  ,其中 cost[i]  是从楼梯第i 个台阶向上爬需要支付的费用,下标从0开始。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。

请你计算并返回达到楼梯顶部的最低花费

题解

可以从0或者小标1开始。说明我们可以从第0个台阶往上,或者从第一个台阶往上,也就是说。我们本身可以在0或者在第一个台阶上。等价于若此时cos[i]数组长度为0或者为1时,我们花费0元就可达到顶层(也就是楼梯为0层或者1层)。
和挑台阶相比,我们此时是需要求到达顶层最小花费。可以假设如下。到0层花费0元,1层花费0元,2层的花应该是0层和1层最小花费那个(因为我们有种方法可以到第二层去)。那到达i层有二种方式。一种是从i-1层过来的,一种是从i-2过来的。如果是求到达i层方法,其实就是到达i-1和到达i-2方法和。但这题是求最小花费。既然都可以到达i层。假设到达i层是最小花费,必然从i-1层或者i-2层到到i层花费最低。

这样一来用动态规划求解,转移方程就很简单了:

            dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]) 

            其中 dp[i]表示到达i层最小花费,应该是取i-1层小花费加上i-1层去i层花费金额之和与i-2层小花费加上i-2层去i层花费金额之和二者求最小值
            初始值:
                        如上面分析可知 dp[0] = dp[1] = 0