題目主體
陣列的每個下標作為乙個階梯,第 i 個階梯對應著乙個非負數的體力花費值 cost[i](下標從 0 開始)。每當你爬上乙個階梯你都要花費對應的體力值,一旦支付了相應的體力值,你就可以選擇向上爬乙個階梯或者爬兩個階梯。問題分析:
1.題意分析:每階樓梯對應著需要花費的體力值,可以每層都爬,也可以跳過一階最多也就跳過一階樓梯爬,取到頂層的最小體力值花費。
2.如何實現:在爬第n階時,我們要考慮的是踩或是不踩該階即第n階樓梯
1)如果不踩第n階,那麼第n-1階必然已經踩過,即我們現在在第n-1上才有權選擇是否踩第n階,??????//廢話
2)如果踩第n階,那麼此時我們有可能在n-1上,也有可能在n-2上,此時要到達n階,就只需要判斷我們到達n-1所需的最小花費加上n-1所需要的花費,與到達n-2最小的花費加上n-2的花費,兩者取其小。
3)每一步所得到的花費都是根據前面的最小花費比較而得到的,所以到達n階樓梯都是最佳方案,
**實現:
main
(int
cost)
return min_cost;
}
核心思想:
1)動態規劃,取到每一步的最佳方案,都可以通過前兩步之間的動態方案之中做取捨。
如何分析動態規劃問題?
重點:動態規劃,重點在動態,如何解析題意,獲取通用表示式,即本題中的min_cost = math.min(n_pre_cost + cost[i-1], n_prepre_cost + cost[i-2]);
,
2)滾動陣列:採用滾動陣列,將原本用來儲存走到每一階梯所需的花費的陣列n優化到只需要常數個變數的空間。(對於任一n所需要的花費最佳方案都只需要n-1和n-2的花費的比較,所以並不需要一直儲存所有n_cost)。
動態規劃之爬樓梯問題
題目如下 分析 假設,只有1個台階,那麼需要爬1步,只有1種方法。假設,只有2個台階,那麼需要先爬1步再爬1步,或者爬2步,有2種方法。假設,只有3個台階,那麼需要先爬1步再爬1步再爬1步 或者爬2步再爬1步 或者爬1步再爬2步 有3種方法。以此類推,最終可以找到規律,假設有n個台階,那麼最終結果等...
爬樓梯問題 動態規劃
題目 乙個人每次只能走一層樓梯或者兩層樓梯,問走到第80層樓梯一共有多少種方法。解題思想 設走第i層樓梯需要dp i 中方法,走第i 1層樓梯需要dp i 1 中方法。則走第 i 1層樓梯的方法種數為dp i 1 dp i 種。實動態規劃解題的主要思想就是找出遞推式,然後利用子問題的解來求最後的最優...
動態規劃(爬樓梯問題)
問題 有 n 階台階,每次可以走 1 或 2 步,請問走到第 n 階台階一共有多少種走法?解 設有 f n 種走法 第一步 1 2 第二步 f n 1 f n 2 狀態方程 f n f n 1 f n 2 n 2 f 0 0,f 1 1,f 2 2 函式 int function int n int...