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

最小花费爬楼梯

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])



全部评论

相关推荐

bLanK的小号:建议自己写一个比较新颖的项目,比如思维导图,在线文档,仿造postman,仿造一个组件库
点赞 评论 收藏
分享
MScoding:你这个实习有一个是当辅导老师,这个和找技术岗没有关系吧?
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务