跳臺階問題詳解---動態規劃
上臺階(初級)
有一樓梯共n級,剛開始時你在第0級,若每次只能跨上一級或二級,要走上第n級,共有多少走法?(練習題NYOJ76)
解決思路(一)
這道題呢 有兩種思路 如果你經驗豐富 一看就看出來是動態規劃了 那麼就好寫了
我們來分析一下動態規劃 首先 n=1 只有一種 n=2 有兩種 這沒有疑問
那麼 我們假設n=10 現在設上到第九層的方法是F(9) 設上到第八層的方法是F(8)
F(9) 種方法和F(8)種方法 兩者中一定沒有重複的 因為它們的終點都不同
那麼對於第九層來說 再走一步 就到達第十層 那麼 我們有F(9)種方法到達第九層
每種方法再走一步就到十了 所以我們就有F(9)種到達第十層的方法了 同理
對於第八層來說 我們不能走一級到達9 因為這種情況已經包含在F(9)裡面了(仔細想想)
所以只能走兩級 到達十 那麼就有F(8)種方法到達十了 而F(8) F(9)不重複 所以F(8)+F(9)種方法到達十
而再往前 7 6 5...這些都需要先經過8 9 才能到 所以都已經包含在F(8) F(9)裡了
所以 最終結論就是 F(n)=F(n-1)+F(n-2) (n>2) F(1)=1 F(2)=2 ------也就是斐波那契數列
解決思路(二)
如果說你不知道上面的怎麼分析,那麼也不要緊,因為這個問題也不是特別複雜,n=3 n=4的情況我們是完全可以手算出來的,那麼觀察規律,很容易就發現這是斐波那契數列了
那麼,既然找規律這麼容易,那我們幹嘛還要考慮上面說的動態規劃解法呢?
其實呢,上面的動態規劃思想很重要,一定要理解,因為題目是活的,我們一定要把原理理解透徹,學會舉一反三
才可以更好的應對題目的變式。
上臺階(升級版)
題目
一個臺階總共有n級,如果一次可以跳1級,也可以跳2級......它也可以跳上n級。此時一隻青蛙跳上一個n級的臺階總共有多少種跳法?
解決思路
這下情況變得複雜了,你就不能用上邊那個找規律的方法了。
根據上邊剛才的分析,我們設跳到一級有F(1)種方法,跳到二級有F(2)種方法.....F(3)...F(4).....
F(1) ..F(2).. F(3).. F(4)...F(n) 這些方法是沒有重複的 因為終點都不一樣
而這次 青蛙一次最多可以跳n階 所以不論當前處在哪一階 他都可以一步到達n層
所以 青蛙處於1....2...3...4...n-1 時和第一個問題中處於8、9往10跳的情況是一樣的
所以 我們得到式子 F(n)=F(n-1)+F(n-2)+F(n-3).......F(1)
而 F(n-1)=F(n-2)+F(n-3)+F(n-4).......F(1)
兩式相減 F(n) - F(n-1)=F(n-1) --------->即F(n)=2*F(n-1) F(1)=1
得到式子答案就出來了,實際做題時候要注意範圍和題目要求。