最小代價爬到樓頂

2021-10-04 10:11:16 字數 1393 閱讀 7216

#1、描述

陣列的每個索引做為乙個階梯,第 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

#2、思路

1、以為是從第0,或者從1選定開始兩次dp然後取最優,不過還是沒想通

2、找狀態!把目標鎖定在某乙個固定階梯上,只能通過前乙個或者前兩個到達。就取那個小的,登上

此階梯的花費是min(前乙個,後乙個)+此階梯的代價  

3、把最後樓頂的代價當成0,

#3、notes

1、vector拷貝構造 : vectorvec ( nums.begin(),nums.end() );

#4、複雜度

2、空間:拷貝陣列時是:o ( n )    ,改進後是 o ( 1 ) 只有變數abc

#5、code

class solution {

public:

int mincostclimbingstairs(vector& cost) {

vectorcost1(cost.begin(),cost.end());

cost1.push_back(0);

int ind=cost1.size();

int a=0;

int b=0;

int c=0;

for(int i=0;ic=min(a,b)+cost1[i];

a=b;

b=c;

return b;

改進之後不用拷貝陣列時候,因為a, b 一直保持著更新,所以最後選擇a 和b 小的那個就好!

class solution {

public:

int mincostclimbingstairs(vector& cost) {      

int ind=cost.size();

int a=0;

int b=0;

int c=0;

for(int i=0;ic=min(a,b)+cost[i];

a=b;

b=c;

return min(a,b);

最小代價樹

題目 描述以下方法稱為最小代價的字母樹 給定一正整數序列,例如 4,1,2,3,在不改變量的位置的條件下把它們相加,並且用括號來標記每一次加法所得到的和。例如 4 1 2 3 5 5 10。除去原數不4,1,2,3之外,其餘都為中間結果,如5,5,10,將中間結果相加,得到 5 5 10 20,那麼...

最小編輯代價

對於兩個字串a和b,我們需要進行插入 刪除和修改操作將a串變為b串,定義c0,c1,c2分別為三種操作的代價,請設計乙個高效演算法,求出將a串變為b串所需要的最少代價。給定兩個字串a和b,及它們的長度和三種操作代價,請返回將a串變為b串所需要的最小代價。保證兩串長度均小於等於300,且三種代價值均小...

最小編輯代價

給定兩個字串str1和str2,再給定三個整數ic,dc和rc,分別代表插入 刪除和替換乙個字元的代價,請輸出將str1編輯成str2的最小代價。輸出三行,第一行和第二行均為一行字串,分別表示兩個字串str1,str2。left 1 leq length str1 length str2 leq 5...