日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

台阶问题---动态规划算法

發(fā)布時間:2024/4/17 编程问答 73 豆豆
生活随笔 收集整理的這篇文章主要介紹了 台阶问题---动态规划算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

問題描述

  所謂的臺階問題就是說,從0開始上臺階1,2,3...n,每次只能上1個或者2個臺階。問上到n個臺階有多少種走法。這個問題是比較典型的,也有很多種變形,我們先講解下這種的實現(xiàn)。

?

問題分析

  我們先按照舉例來分析,我測試了下,6個臺階時候的變化,如下個表 

臺階數(shù)走法數(shù)
11
22
33
45
58
613

這特別像是一個斐波那契數(shù)列,那我們想下,如果有10階臺階,那么我們往后倒推,10階臺階肯定是第九個臺階和是第八個臺階上來的,那第九個臺階肯定是第八個臺階和第七個臺階上來的,第八個臺階肯定是第七個臺階和第六個臺階上來的,同理,我們得出了f(n)=f(n-1)+f(n-2)??

代碼實現(xiàn)

?

/*** 動態(tài)規(guī)劃算法,f(n)=f(n-1)+f(n-2)* @param n* @return*/private int getSolution(int n){if(n < 0){return -1;}if(n == 0){return 0;}if(n == 1){return 1;}int a = 1;int b = 1;int fn = 0;for(int i = 2; i < n+1; i++){fn = a + b;b = a;a = fn;}return fn;}

?

?

問題延伸

  如果臺階問題變化一下,如果臺階隨意可以上,可以上1個,2個,3個.....n個,那么n個臺階的話,有多種走法呢?

  我們來分析一波,按照上面說的,10個臺階,可以由第九個,八個,七個.......一個臺階都可以上來,那么第九個臺階可以由第八個,七個,六個.....一個臺階都可以上來,同理我們得出,

  f(n)=f(n-1)+f(n-2)+.......+f(4)+f(3)+f(2)+f(1)

  f(n-1) = f(n-2) +f(n-3) +........+f(4)+f(3)+f(2)+f(1)

  經(jīng)過上面兩個算式,我們可以得出,f(n)=2f(n-1)

? 代碼實現(xiàn)

1 /** 2 * 動態(tài)規(guī)劃算法, 3 * f(n)=2f(n-1) 4 * @param n 5 * @return 6 */ 7 private int getDoubleTree(int n){ 8 if(n < 0){ 9 return -1; 10 } 11 if(n==0){ 12 return 0; 13 } 14 if(n==1){ 15 return 0; 16 } 17 int a = 1; 18 int fn = 0; 19 for(int i = 2; i < n + 1; i++){ 20 fn = 2*a; 21 a = fn; 22 } 23 return fn; 24 }

?

?

?

?

  

轉(zhuǎn)載于:https://www.cnblogs.com/lixiaochao/p/10025839.html

總結(jié)

以上是生活随笔為你收集整理的台阶问题---动态规划算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。