1. 程式人生 > >跳臺階問題詳解---動態規劃

跳臺階問題詳解---動態規劃

上臺階(初級)

有一樓梯共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=3的情況就可以大膽的試斐波那契了。但是要注意下,斐波那契數列到三四十左右就爆long long了  。注意範圍。

那麼,既然找規律這麼容易,那我們幹嘛還要考慮上面說的動態規劃解法呢?

其實呢,上面的動態規劃思想很重要,一定要理解,因為題目是活的,我們一定要把原理理解透徹,學會舉一反三

才可以更好的應對題目的變式。

上臺階(升級版)

題目

一個臺階總共有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

得到式子答案就出來了,實際做題時候要注意範圍和題目要求。