南陽理工 76《超級臺階》 動態規劃
阿新 • • 發佈:2019-02-01
超級臺階
時間限制:1000 ms | 記憶體限制:65535 KB難度:3- 描述
有一樓梯共m級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第m級,共有多少走法?
注:規定從一級到一級有0種走法。
- 輸入
- 輸入資料首先包含一個整數n(1<=n<=100),表示測試例項的個數,然後是n行資料,每行包含一個整數m,(1<=m<=40), 表示樓梯的級數。
- 輸出
- 對於每個測試例項,請輸出不同走法的數量。
- 樣例輸入
2 2 3
- 樣例輸出
1 2
- 來源
題解:
這種屬於動態規劃的經典題型,只要找到狀態轉移方程就可以了,設定dp[i]是走到i可以走的方法總數,那麼退一步來說他是等於i-2,i-1的和(意思就是,退一步和退兩步那兩個位置的方法總和)。
因此狀態轉移方程為: dp[i]=dp[i-1]+dp[i-2];
原創程式碼:
#include<stdio.h>
int dp[40];
int main()
{
int n,t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
dp[1]=0;
dp[2]=1;
dp[3]=2;
for(int i=4;i<=40;i++)
dp[i]=dp[i-1]+dp[i-2];
printf("%d\n",dp[n]);
}
return 0;
}