使用最小代价爬楼梯

你需要爬上一个N层的楼梯,在爬楼梯过程中, 每阶楼梯需花费非负代价,第i阶楼梯花费代价表示为cost[i], 一旦你付出了代价,你可以在该阶基础上往上爬一阶或两阶。

你可以从第 0 阶或者 第 1 阶开始,请找到到达顶层的最小的代价是多少。

N和cost[i]皆为整数,且N∈[2,1000],cost[i]∈ [0, 999]。

输入描述:

输入为一串半角逗号分割的整数,对应cost数组,例如

10,15,20

输出描述:

输出一个整数,表示花费的最小代价

输入例子1:

1,100,1,1,1,100,1,1,100,1

输出例子1:

6

这里花费应该理解为站在该台阶上就要付费,令dp[i] 表示爬到第i个台阶所花的最小费用,dp[0]=cost[0], dp[1]=cost[1]

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

这里需要特别注意的是,需要在cost数组中添加一个0元素,表示站在顶层所需要的费用。这样是为了处理从第n-1个台阶爬两步的情况。

算法代码

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) 
    {
        int n = cost.size();
        vector<int> dp(n+1,0);
        cost.push_back(0);                // 这一步非常精髓
        dp[0] = cost[0];
        dp[1] = cost[1];
        for(int i=2;i<=n;i++)
            dp[i]=min(dp[i-2],dp[i-1])+cost[i];
        return dp[n];
    }
};

这里麻烦的是还要处理字符串输入,直接使用Python的split函数和map函数将输入变为整形数组

cost = input().split(",")
cost = list(map(int, cost))
cost.append(0)
n = len(cost)
dp = [0 for i in range(n)]
dp[0] = cost[0]
dp[1] = cost[1]
for i in range(2, n):
    dp[i] = cost[i] + min(dp[i - 2], dp[i - 1])
print(dp[n - 1])

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值