81使用最小花費爬樓梯(746)
阿新 • • 發佈:2020-09-11
作者:
晚於: 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; }