動態規劃 1 青蛙跳台階

2021-09-29 20:48:26 字數 1417 閱讀 4763

動態規劃

例子一:

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

分析:第一步:

假設台階有7階的話,先從正向分析,假如先跳了一階,那麼還有六階可選,假如先挑了二階,就還有五階可選。所以可以得出,在青蛙做出乙個動作後會有f(7) = f(6) + f(5);

第二步

在青蛙做出第二步動作時,先假設青蛙第一次只跳了一階,此時剩六階台階,又演變成了我們第一步的動作,於是便有f(6)=f(5) + f(4),以此類推;

第三步

總有一天,青蛙會跳到只剩一階或兩階的情況,此時便是我們需要解決的邊界問題,f(2) = 2,f(1) = 1;

問題解決。**實現如下:

class solution

if (nums == 1)

if (nums == 2)

int i = 0;

int *value = new int[nums + 1];

value[0] = 0;

value[1] = 1;

value[2] = 2;

for (i = 3; i <= nums;i++)

return value[nums];

}};int main()

分析:第一步:

假設台階有7階的話,先從正向分析,假如先跳了一階,那麼還有六階可選,假如先挑了二階,就還有五階可選。以此類推所以可以得出,在青蛙做出乙個動作後會有f(7) = f(6) + f(5) + f(4) + f(3) + f(2) + f(1);

第二步:

找出邊界,f(1) = 1,f(2)=2;

用同樣的方法解決了跳n階的問題,**實現如下:

#include using namespace std;

class solution

if (nums == 1)

if (nums == 2)

int i = 0;

int *value = new int[nums + 1];//存放nums台階時的方法

value[0] = 0;

value[1] = 1;

value[2] = 2;

for (i = 3; i <= nums;i++)

value[i] = value[i] + 1;//+1是統計青蛙一次跳起nums階時的情況

}return value[nums];

}};int main()

青蛙跳台階(動態規劃)

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

動態規劃 青蛙跳台階問題

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

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

本題重點不是怎麼做出來,而是學習如何優化自己的演算法。乙隻 青蛙 一次可以跳上1級台階,也可以跳上2級。求該 青蛙跳上 乙個n級的台階總共有多少種跳法?動態規劃解題的三個步驟 定義dp陣列的含義,其中dp陣列90 是二維陣列,這裡問題比較簡單,是一維。找出陣列元素之間的關係式,即dp n 是可以用d...