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

Min Cost Climbing Stairs [746]

时间:2019-01-13 10:22:52      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:int   描述   href   air   vector   规划   n+2   数学   开始   

Min Cost Climbing Stairs [746]

题目描述

简单来说就是:要跳过当前楼梯需要花费当前楼梯所代表的价值cost[i], 花费cost[i]之后,可以选择跳一阶或者两阶楼梯,以最小的代价达到楼层,也就是跨过所有楼梯

问题解决

穷举法

从第一阶楼梯开始,遍历所有可能的情况,然后选择代价最小的。复杂度会比较高,时间复杂度O(2^n),不太适合

动态规划

逆向解决:从后往前倒退,跳过当前阶楼梯代价最小的情况下需要考虑其面楼梯代价最小的情况,而且每次只能跳一阶或者两阶,也就是说跳过当前fn阶楼梯,需要的代价可以表示为f(n) = cost[n]+ min(f(n+1), f(n+2))(果然编程到最后都是数学问题啊)

这样就找到了解决问题的办法。从最后的楼梯开始,f(n)=cost[n]+min(f(n+1)=0, f(n+2)=0);
f(n-1) = cost[n-1] + min(f(n), f(n+1)),以此类推

代码

    class Solution {
        public:
            int minCostClimbingStairs(vector<int>& cost) {
                int length = cost.size();
                int f1 = 0;
                int f2 = 0;
                for(int i=length-1; i>=0; i--){
                    int fn = cost[i] + min(f1, f2);
                    f2 = f1;
                    f1 = fn;
                }
                return min(f1, f2);
            }
    };

Min Cost Climbing Stairs [746]

标签:int   描述   href   air   vector   规划   n+2   数学   开始   

原文地址:https://www.cnblogs.com/chinazhonghao/p/10261942.html

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