• 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;
    }
  • 相关阅读:
    java 设计模式 (一)
    多Linux安装
    华北电力大学 研究生学院 笔记
    电力大学 专升本
    19年 考研究生 过程
    netcat-flume-logger
    大神写的K8S 二进制安装笔记
    非常全的Mybatis学习笔记
    Docker-compose部署gitlab
    docker-compose 配合 dockerfile使用
  • 原文地址:https://www.cnblogs.com/zmmm/p/13654724.html
Copyright © 2020-2023  润新知