zoukankan      html  css  js  c++  java
  • 81使用最小花费爬楼梯(746)

    作者: Turbo时间限制: 1S章节: 动态规划

    晚于: 2020-09-02 12:00:00后提交分数乘系数50%

    截止日期: 2020-09-09 12:00:00

    问题描述 :

    数组的每个索引作为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始)。

    每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。

    您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。

    示例 1:

    输入: cost = [10, 15, 20]

    输出: 15

    解释: 最低花费是从cost[1]开始,然后走两步即可到阶梯顶,一共花费15。

     示例 2:

    输入: cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1]

    输出: 6

    解释: 最低花费方式是从cost[0]开始,逐个经过那些1,跳过cost[3],一共花费6。

    输入说明 :

    首先输入cost数组的长度n,

    然后输入n个整数,以空格分隔。

    注意:

    n在 [2, 1000]范围内。

    每一个 cost[i] 范围为 [0, 999]。

    输出说明 :

    输出一个整数

    输入范例 :

    输出范例 :

    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    class Solution {
    public:
        int minCostClimbingStairs(vector<int>& cost) 
        {
            vector<int> dp(cost.size());
            dp[0]=cost[0];
            dp[1]=cost[1];
            for(int i=2;i<cost.size();i++)
            {
                dp[i]=min(dp[i-1],dp[i-2])+cost[i];
            }
            return min(dp[cost.size()-1],dp[cost.size()-2]);
        }
    };
    int main()
    {
        int n,data;
        vector<int> nums;
        cin>>n;
        for(int i=0; i<n; i++)
        {
            cin>>data;
            nums.push_back(data);
        }
        int res=Solution().minCostClimbingStairs(nums);
        cout<<res<<endl;
        return 0;
    }
  • 相关阅读:
    思考:如何保证服务稳定性?
    svn:Item is out of date解决办法
    MAC OS 10.15 Lucene 源码分析环境搭建
    防止数据重复提交的6种方法(超简单)!
    6种快速统计代码执行时间的方法,真香!
    漫画:Integer 竟然有 6 种比较方式?
    IDEA 不为人知的 5 个骚技巧!真香!
    自由职业半年之后,我又滚回职场了...
    为什么建议你使用枚举?
    ESP8266
  • 原文地址:https://www.cnblogs.com/zmmm/p/13654724.html
Copyright © 2011-2022 走看看