码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode746——爬楼梯——动态规划

时间:2021-01-19 12:19:43      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:公式   题意   有一个   space   rgb   理论   main   ace   names   

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

//原理:动态规划法
//到达每个阶梯都有一个理论上的最小体力minCost,按照minCost[i] = min(minCost[i-2]+cost[i-2],minCost[i-1]+cost[i-1])
//的公式,可以从第一项逐项递推到最后一项的minCost,即题意的最小体力。

//到达第i层阶梯,都只有两种上楼梯的情况:
//1、花费minCost[i-2]到第i-2层,然后花费cost[i-2]跨过两层到第i层;
//2、花费minCost[i-1]到第i-1层,然后花费cost[i-1]跨过一层到第i层。
//举例:i        0    1    2    3    4    (5)
//        cost    1    2    3    4    5    (0)
//        minCost    0    0    1    2    4    (6)
//到i=3的阶梯,有minCost[3] = min(minCost[1]+cost[1],minCost[0]+cost[0])
//                                    2        +    0    ,    0        +    1
//此时,结果是1

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {        

        vector<int> minCost(cost.size()+1);                        //为了计算方便,在最后的minCost加一个空位,视为cost为0的minCost,即结果
        minCost[0] = 0;
        minCost[1] = 0;
        for (int i = 2; i <= cost.size(); i++) {
            minCost[i] = min(minCost[i-2]+cost[i-2],minCost[i-1]+cost[i-1]);
        }
        return minCost[cost.size()];
    }
};

int main()
{
    Solution s;
    vector<int> v = {1,2,3,4,5};
    cout <<s.minCostClimbingStairs(v);
    cout << endl;
}

 

leetcode746——爬楼梯——动态规划

标签:公式   题意   有一个   space   rgb   理论   main   ace   names   

原文地址:https://www.cnblogs.com/Ping697/p/14295513.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!