力扣刷題筆記_動態規劃爬樓梯問題

題目描述

在這裏插入圖片描述
假設你正在爬樓梯。需要 n 階你才能到達樓頂。
每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?
注意:給定 n 是一個正整數。

示例一
輸入: 2
輸出: 2
解釋: 有兩種方法可以爬到樓頂。
方法一: 1 階 + 1 階
方法二: 2 階

示例二
輸入: 3
輸出: 3
解釋: 有三種方法可以爬到樓頂。
方法一:1 階 + 1 階 + 1 階
方法二:1 階 + 2 階
方法三:2 階 + 1 階

動態規劃

它的最優解可以從其子問題的最優解來有效地構建。

  1. 第 i 階可以由以下兩種方法得到:
  2. 在第 (i-1)階後向上爬一階。
  3. 在第 (i-2)階後向上爬 22 階。

到達第 i 階的方法總數就是到第 (i-1)階和第 (i-2) 階的方法數之和。

dp[i] 表示能到達第 i 階的方法總數: dp[i]=dp[i-1]+dp[i-2]

#include<iostream>
using namespace std;
int main()
{
	int n;
	cin>>n;
	if(n==1)
	{
		return 1;
	}
	int dp[n+1];//動態規劃需要從第三個臺階開始 
	dp[1]=1; 
	dp[2]=2;//排除只有一個臺階與兩個臺階的特殊情況
	for(int i=3;i<=n;++i)
	{
		dp[i]=dp[i-1]+dp[i-2];//爬到當前臺階的方法數量 
	} 
	return dp[n]; 
}

在這裏插入圖片描述
飲水思源,力扣官方解答

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章