題目位址
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 對於每個測...