本題重點不是怎麼做出來,而是學習如何優化自己的演算法。
乙隻⻘青蛙⼀一次可以跳上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,則上述的意思就是第十層的選擇等於第九層的選擇數 第八層的選擇...