超級樓梯 遞推

2021-10-22 16:55:27 字數 941 閱讀 7247

題目:

有一樓梯共m級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第m級,共有多少種走法?

輸入:

輸入資料首先包含乙個整數n,表示測試例項的個數,然後是n行資料,每行包含乙個整數m(1<=m<=40),表示樓梯的級數。

輸出:

對於每個測試例項,請輸出不同走法的數量

sample input22

3sample output12

解題思路:

首先從題意分析,每一次有兩種走法,第一種是走乙個台階,第二種是走兩個台階,我們從後往前看,如果它走到了第i級台階,那麼它的上一次走法有幾種呢?顯然是兩種,從i-1級台階或者i-2級台階走到i級台階。所以通過上述分析,設走到第i級台階有f[i]總走法,那麼f[i]=f[i-1]+f[i-2]也就是從到第i-1的走法,加上到i-2的走法之和。我們還可以得出f[1]=0,f[2]=1,f[3]=2,我在解釋一下這三個資料,首先第一級就是開始站的位置,所以需要0步,第二級只能從第一級走一步達到,所以f[2]=1,第**可以從第一級走兩步,或者第二級走一步,(注意為什麼不是從第一級走到第二級,在從第二級走到第**呢?)因為從第二級走到第**已經包括這種情況,所以不必考慮!

**:

#include

using

namespace std;

int f[43]

;int

main()

return0;

}

總結:

這道題主要考的是遞推,和斐波那契數列,二者也都屬於動態規劃(dp)中初級知識,動態規劃的本質就是,記錄正確答案,以及兩個性質,無後效性,最優子結構!

超級樓梯(遞推式)

problem description 有一樓梯共m級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第m級,共有多少種走法?input 輸入資料首先包含乙個整數n,表示測試例項的個數,然後是n行資料,每行包含乙個整數m 1 m 40 表示樓梯的級數。output 對於每個測試例項,請輸出不同...

(遞推入門)超級樓梯 HDOJ

超級樓梯 problem description 有一樓梯共m級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第m級,共有多少種走法?input 輸入資料首先包含乙個整數n,表示測試例項的個數,然後是n行資料,每行包含乙個整數m 1 m 40 表示樓梯的級數。output 對於每個測試例項,...

A 超級樓梯

有一樓梯共m級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第m級,共有多少種走法?input 輸入資料首先包含乙個整數n,表示測試例項的個數,然後是n行資料,每行包含乙個整數m 1 m 40 表示樓梯的級數。output 對於每個測試例項,請輸出不同走法的數量 sample input22...