HDOJ2041超級樓梯筆記 對於dfs的第一嘗試

2021-09-11 06:21:18 字數 1344 閱讀 7494

題目位址

n為1時答案是1,從第一級踏上第一級,只能上一級或二級,不應該是0?

開始的時候用了dfs來做,但是我這樣寫的時間複雜度應該為o(2 ^ n),如果沒估算錯,畢竟新手,很可能是錯的。

當n為40,2 ^ 40太大了,肯定超時,也不出所料,tl。

解決方法是dp的思想,如果有n個階梯,那麼可以從第n - 1個階梯走上去或者從第n - 2個階梯走上去

從第n - 1個階梯走上去只有乙個那就是踏一級,也可以從第n - 2個階梯走上去,走兩個一級或者乙個

二級,也許會有疑問,那不就是有兩個可能了,走兩個一級或者乙個二級,可是別忘了,當走上一級

的時候,變成了第n - 1級了,那就變成了從第n - 1 級走上樓梯了,相當於第n - 1級走一級一級上去的話的可能狀況都在從第n - 1走上樓梯。所以不用乘以2

所以狀態轉移方程為d[n] = d[n - 1] + d[n - 2],這也是遞推的依據。

#include

#include

#include

using namespace std;

intmain

(void

)while

(scanf

("%d"

,&n)

!=eof)}

printf

("time:%.2f\n",(

double

)clock()

/ clocks_per_sec)

;return0;

}

HDOJ 2041 超級樓梯

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

hdu 2041 超級樓梯

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

HDU 2041 超級樓梯

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