Leetcode#746. Min Cost Climbing Stairs(最低花费登楼梯--动态规划)
2018-02-19 17:07
246 查看
题目
On a staircase, the i-th step has some non-negative cost cost[i] assigned (0 indexed).Once you pay the cost, you can either climb one or two steps. You need to find minimum cost to reach the top of the floor, and you can either start from the step with index 0, or the step with index 1.
Example 1:
Input: cost = [10, 15, 20] Output: 15 Explanation: Cheapest is start on cost[1], pay that cost and go to the top.
Example 2:
Input: cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1] Output: 6 Explanation: Cheapest is start on cost[0], and only step on 1s, skipping cost[3].
Note:
cost will have a length in the range [2, 1000].
Every cost[i] will be an integer in the range [0, 999].
题意
每一个楼梯上花费为cost[i],你花费cost[i]可以登上1个楼梯或者1个楼梯,同样,开始的时候你可以选择登上1或者登上2个楼梯。
题解
动态规划,划分成局部最优考虑。C++代码
class Solution { public: int minCostClimbingStairs(vector<int>& cost) { int dp[cost.size()+1]; dp[0] = 0; dp[1] = 0; //局部,每层最少花费 for(int i=2; i<=cost.size(); i++){ dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]); } return dp[cost.size()]; } };
python代码
class Solution(object): def minCostClimbingStairs(self, cost): """ :type cost: List[int] :rtype: int """ dp = [] dp.append(0) dp.append(0) for i in range(2, len(cost)+1): dp.append(min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])) return dp[len(cost)]
相关文章推荐
- hdu 2041 超级楼梯 动态规划 简单
- 上楼梯(动态规划)
- 动态规划练习一 19:最低通行费
- 动态规划求解 最小花费
- 上楼梯(动态规划)
- 动态规划练习题-19(最低通行费)
- HDU 2014:超级楼梯(动态规划)
- ACM-动态规划19-最低通行费
- DP 动态规划 Problem J 1010 上楼梯问题
- 最小花费(动态规划)
- 【动态规划】牛顿爬楼梯问题
- 9.9递归和动态规划(一)——小孩上楼梯的方式的种类
- 最短路径和最少花费问题--动态规划
- 20170801_动态规划之爬楼梯有多少不同的方法
- 九度OJ 1205 N阶楼梯上楼问题 -- 动态规划(递推求解)
- 爬楼梯问题(动态规划)
- 动态规划走楼梯
- 题目1086:最小花费 ( 动态规划 )
- 上楼梯(动态规划)
- 九度OJ 1205 N阶楼梯上楼问题 -- 动态规划(递推求解)