题解 | #最小花费爬楼梯#

最小花费爬楼梯

http://www.nowcoder.com/practice/9b969a3ec20149e3b870b256ad40844e

思路:动态规划
dp[i]:爬到第i层的最小花费
每次可爬1或2阶,所以最小花费可分为两种情况:
  1. 从i-1阶爬上来,花费为:爬到i-1阶的最小花费 + 从第i-1阶爬要花的费用,即dp[i-1] + costs[i-1]
  2. 从i-2阶爬上来,花费为:爬到i-2阶的最小花费 + 从第i-2阶爬要花的费用,即dp[i-2] + costs[i-2]
由此可以爬到第i阶的花费为上述两者的最小值,故可确定推导公式为:dp[i] = min(dp[i-1] + costs[i-1], dp[i-2] + costs[i-2])
由于是计算最小花费,所以将dp数组初始化为最大值;
由推导公式可知,每次的状态值都由前两个状态值推导而来,故初始化dp[0] = 0, dp[1] = 0,因为可从第0阶或第一阶开始
 代码如下:
n = int(input())
costs = list(map(int, input().split()))
if n <= 1:
    print(0)
else:
    dp = [float('inf')] * (n+1)
    dp[0] = 0
    dp[1] = 0
    for i in range(2, n+1):
        dp[i] = min(dp[i-1]+costs[i-1], dp[i-2]+costs[i-2])
    print(dp[n])



全部评论

相关推荐

爱吃肉的伊登在写日记:好棒,27届简历能做成这个样子,但是第一个项目感觉cover住难度还是不小的,特别是二面的时候肯定要对分布式系统设计这一块儿有高出正常面试者的水平才行
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务