題目:乙個人每次只能走一層樓梯或者兩層樓梯,問走到第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...