問題1:
陣列的每個索引作為乙個階梯,第 i個階梯對應著乙個非負數的體力花費值 cost[i]。
每當你爬上乙個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬乙個階梯或者爬兩個階梯。
您需要找到達到樓層頂部的最低花費。在開始時,你可以選擇從索引為 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。
題解1:
方法:動態規劃
計算花費 f[i] 有乙個清楚的遞迴關係:f[i] = cost[i] + min(f[i+1], f[i+2])。我們可以使用動態規劃來實現。
演算法:當我們要計算 f[i] 時,要先計算出 f[i+1] 和 f[i+2]。所以我們應該從後往前計算 f。
在第 i 步,讓 f1,f2 為 f[i+1],f[i+2] 的舊值,並將其更新為f[i],f[i+1] 的新值。當我們從後遍歷 i 時,我們會保持這些更新。在最後答案是 min(f1, f2)。
**如下
public
intmincostclimbingstairs
(int
cost)
return math.
min(f1,f2)
;}
題解 動態規劃
目錄全部分 這道題首先不考慮優化,我們該怎麼寫呢?顯然,這是乙個區間dp,我們可以利用記憶化搜尋來寫。1 定義狀態 dp i j 表示前i頭分j段的最小價值。2 狀態轉移方程 ans min ans,value x,i dfs dp i 1,left 1 這個狀態轉移方程和 這道題十分類似。3 然後...
動態規劃中級題解
二維的動態規劃解決 題目 假設在乙個n m的平面上,有n m個格仔,每個格仔中都有一定數量的蘋果,每次我們只能從某個格仔處向右或者向下走,注意不能超過地圖的限制,請問如何設計路徑才可以保證最後從起點到終點後獲得的蘋果數量最多 動態規劃解析 建立二維的dp陣列dp i j 表示走到map i j 格的...
演算法設計與分析 動態規劃
最大子段和問題 給定由n個整數 包含負整數 組成的序列a1,a2,an,求該序列子段和的最大值。i.當所有整數均為負值時定義其最大子段和為0。所求的最優值為 i.例如,當 a1,a2,a7,a8 1,3,7,8,4,12,10,6 時,最大子段和為 bj是1到j位置的最大子段和 由bj的定義易知,當...