NOI2 3 3525 上台階 題解 C

2021-10-07 02:54:57 字數 1279 閱讀 2331

3525:上台階

總time limit: 1000ms memory limit: 65536kb

description

樓梯有n階台階,上樓時可以一步上1階,也可以一步上2階,也可以一步上3階,程式設計計算共有多少種不同的走法。

input

輸入的每一行包括一組測試資料,即為台階數n。最後一行為0,表示測試結束。

output

每一行輸出對應一行輸入的結果,即為走法的數目。

sample input12

340sample output12

47注意,n的範圍在1~99

這一題的方法有兩種,一種是用遞迴,還有一種是遞推的方法,先說說遞迴吧。

遞迴解法思路

就是乙個函式f(),f(n)可以等於f(n-1)+f(n-2)+f(n-3),這個沒有問題吧,我們可以很輕易的寫出一小段**:

intf(

int n)

else

if(n ==2)

else

if(n ==3)

else

}

把這個函式放進**裡應付小資料確實可以得到正確答案,但是如果輸入的結果是99的時候就tle(超時)了,所以我們要使用一種叫做記憶化搜尋的東東,就是拿乙個陣列去存結果,就不會超時啦quq

遞推解法思路

遞推跟遞迴差不多,只不過遞推可比遞迴簡單了許多,只需要乙個存結果的陣列就ok啦。核心**先上:

int res[

100]=;

res[1]

=1,res[2]

=2,res[3]

=4;.

..for(

int i =

4;i)

差不多了,上**:

#include

using

namespace std;

intmain()

,n =0;

long

long ans[

105]=;

ans[1]

=1; ans[2]

=2; ans[3]

=4;while(1

) k[n]

= l;

n++;}

for(

int i =

0;i)for

(int j =

4;j<=k[i]

;j++

) cout<]<}}

上台階問題

問題描述 現在小瓜想通過台階走上平台,最底層 小瓜所在的層 編號為1,最頂層編號為n。由於小瓜的腿比較短,他一次只能向上走1級或者2級台階。小瓜想知道他有多少種方法走上平台,你能幫幫他嗎?輸入 乙個整數n,其中2 n 25。輸出 一行乙個整數,表示小瓜上台階的方案數 資料範圍 對於12 的資料,2 ...

賽碼 上台階(C )

設定人現在在台階1層,每次只能上1層到兩層,到台階1層有0種走法,到台階2層有1種走法,到台階3層有2種走法,這樣我們已經知道底部子問題的解。f n f n 1 f n 2 比如說4層只能由2層 跨兩步 或3層到達 跨1步 因此4層的走法數應該是2層走法數和3層走法數的和。使用乙個陣列來儲存到某個台...

1190 上台階(遞推)

1190 上台階 遞推 時間限制 1000 ms 記憶體限制 65536 kb 提交數 20752 通過數 5913 題目描述 樓梯有n 71 n 0 階台階,上樓時可以一步上1階,也可以一步上2階,也可以一步上3階,程式設計計算共有多少種不同的走法。輸入 輸入的每一行包括一組測試資料,即為台階數n...