力扣刷题笔记_动态规划爬楼梯问题

题目描述

在这里插入图片描述
假设你正在爬楼梯。需要 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]; 
}

在这里插入图片描述
饮水思源,力扣官方解答

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