1. 程式人生 > 實用技巧 >81使用最小花費爬樓梯(746)

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; }