遞迴與動態規劃 青蛙跳台階

2021-10-07 12:42:37 字數 1094 閱讀 1523

本題重點不是怎麼做出來,而是學習如何優化自己的演算法。

乙隻⻘青蛙⼀一次可以跳上1級台階,也可以跳上2級。求該⻘青蛙跳上⼀乙個n級的台階總共有多少種跳法?

動態規劃解題的三個步驟:

定義dp陣列的含義,其中dp陣列90%是二維陣列,這裡問題比較簡單,是一維。

找出陣列元素之間的關係式,即dp[n]是可以用dp[n-1],dp[n-2]…dp[1],來推出dp[n]的

找出初始值

而對於這個問題。dp[i]的含義為:跳上第i級的台階共有dp[i]種跳法,這樣dp[n]就是所要求的。

接下來是找遞推關係,青蛙到達第n及台階有兩種方式,一種是從第n-1級跳上來,一種是第n-2級跳上來,所以dp[n]=dp[n-1]+dp[n-2]

尋找初始條件,dp[0]=0,dp[1]=1;這裡有乙個要注意的地方是當n=2時,dp[2]=2;但若按照公式計算,dp[2]=dp[1]+dp[0]=1,顯然不符合,故dp[2]=2也是初始條件。

方案一:

接下來就可以寫**了

intf(

int n)

return dp[n]

;}

這種做法時間複雜度是指數級別的,原因是有很多值是重複執行的,所以可以進行優化。

方案二:用map儲存已經計算過的狀態

//⽤用⼀乙個hashmap來儲存已經計算過的狀態

static map

map =

newhashmap()

;public

static

intsolve

(int n)

else

else

}}

方案三:我們還可以不用hashmap來儲存狀態

public

static

intsolve

(int n)

int f1 =0;

int f2 =1;

int sum =0;

for(

int i =

1; i<= n; i++

)return sum;

}

青蛙跳台階(動態規劃)

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 這個題採用動態規劃的思想,它每次只能跳一階或者兩階台階 那麼它跳到第n階台階就有兩種情況,從第n 1階台階一次跳一階 或者從n 2階台階一次跳兩階 那麼依次類推,只要保留跳到n 1和n...

動態規劃 1 青蛙跳台階

動態規劃 例子一 乙隻青蛙一次可以跳上1級台階,也可以跳上2級台階。求該青蛙跳上乙個n級台階總共有多少種跳法。分析 第一步 假設台階有7階的話,先從正向分析,假如先跳了一階,那麼還有六階可選,假如先挑了二階,就還有五階可選。所以可以得出,在青蛙做出乙個動作後會有f 7 f 6 f 5 第二步 在青蛙...

動態規劃 青蛙跳台階問題

問題描述 青蛙可以一次跳乙個台階,也可以一次跳兩個台階,總共有10層台階,青蛙有多少種選擇 動態規劃 設第n層的最多選擇為stage n 根據題意,可得如下狀態轉移方程 stage n stage n 1 stage n 2 如果n 10,則上述的意思就是第十層的選擇等於第九層的選擇數 第八層的選擇...