爬樓梯問題 動態規劃

2021-07-11 02:18:01 字數 578 閱讀 2473

題目:乙個人每次只能走一層樓梯或者兩層樓梯,問走到第80層樓梯一共有多少種方法。

解題思想:設走第i層樓梯需要dp[i]中方法,走第i-1層樓梯需要dp[i-1]中方法。則走第

i+1層樓梯的方法種數為dp[i-1]+dp[i]種。

實動態規劃解題的主要思想就是找出遞推式,然後利用子問題的解來求最後的最優解。

下面是走樓梯題目的源**:

#include using namespace std;

int dp[10001] = ;

int main()

cout<

上面的題目,如果將走樓梯的方法換成可以一次走1層,2層,3層。依然可以很簡單地利用動態規劃來解決。關鍵是找出遞推式。

走i+3層樓梯的方法數是走i,i+1,i+2層樓梯之和。即有遞推式:

dp[i+3] = dp[i]+ dp[i+1] + dp[i+2]

程式**如下:

#include using namespace std;

int dp[ 10001 ] = ;

int main()

cout<< dp[ num ] <

動態規劃(爬樓梯問題)

問題 有 n 階台階,每次可以走 1 或 2 步,請問走到第 n 階台階一共有多少種走法?解 設有 f n 種走法 第一步 1 2 第二步 f n 1 f n 2 狀態方程 f n f n 1 f n 2 n 2 f 0 0,f 1 1,f 2 2 函式 int function int n int...

動態規劃 爬樓梯

假設你正在爬樓梯,需要n步你才能到達頂部。但每次你只能爬一步或者兩步,你能有多少種不同的方法爬到樓頂部?比如n 3,1 1 1 1 2 2 1 3,共有3種不同的方法 返回 3 解題思路 沒接觸過動態規劃的時候,我用排列組合做的,在我這篇部落格中 可以看一下。實際上,這個題目就是乙個斐波那契數列,這...

爬樓梯 動態規劃

假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例 1 輸入 2 輸出 2 解釋 有兩種方法可以爬到樓頂。1.1 階 1 階 2.2 階 示例 2 輸入 3 輸出 3 解釋 有三種方法可以爬到樓頂。1...