1. 程式人生 > >動態規劃演算法---(一)

動態規劃演算法---(一)

摘自網路:

————————————

題目:

有一座高度是10級臺階的樓梯,從下往上走,每跨一步只能向上1級或者2級臺階。要求用程式來求出一共有多少種走法。

比如,每次走1級臺階,一共走10步,這是其中一種走法。我們可以簡寫成 1,1,1,1,1,1,1,1,1,1。

再比如,每次走2級臺階,一共走5步,這是另一種走法。我們可以簡寫成 2,2,2,2,2。

當然,除此之外,還有很多很多種走法。

————————————

第一種情況:

第二種情況:

把思路畫出來,就是這樣子:

F(1) = 1;

F(2) = 2;

F(n) = F(n-1)+F(n-2)(n>=3)

方法一:遞迴求解

由於程式碼比較簡單,這裡就不做過多解釋了。

如圖所示,相同的顏色代表了方法被傳入相同的引數。

方法二:備忘錄演算法

在以上程式碼中,集合map是一個備忘錄。當每次需要計算F(N)的時候,會首先從map中尋找匹配元素。如果map中存在,就直接返回結果,如果map中不存在,就計算出結果,存入備忘錄中。

方法三:動態規劃求解

程式從 i=3 開始迭代,一直到 i=n 結束。每一次迭代,都會計算出多一級臺階的走法數量。迭代過程中只需保留兩個臨時變數a和b,分別代表了上一次和上上次迭代的結果。 為了便於理解,我引入了temp變數。temp代表了當前迭代的結果值。

見下一節;