70. 爬楼梯
dp思想:
dp[i]表示爬到i阶楼梯有dp[i]种方法
初始dp[0] = 0, dp[1] = 1, dp[2] = 2
递推关系式:dp[i] = dp[i-2] + dp[i-1]
#include<iostream>
using namespace std;
//dp思想
//dp[i]表示爬到i阶楼梯有dp[i]种方法
//初始dp[0] = 0, dp[1] = 1, dp[2] = 2
//递推关系式:dp[i] = dp[i-2] + dp[i-1]
int climbStairs(int n)
{
int *dp = new int[n+2];
dp[0] = 0;
dp[1] = 1;
dp[2] = 2;
for(int i=3;i<=n;i++)
dp[i] = dp[i-2] + dp[i-1];
return dp[n];
}
//优化
int climb_Stairs(int n)
{
int dp[4];
dp[0] = 0;
dp[1] = 1;
dp[2] = 2;
for(int i=3;i<=n;i++)
{
dp[3] = dp[1] + dp[2];
dp[1] = dp[2];
dp[2] = dp[3];
}
if(n < 3)
return dp[n];
return dp[3];
}
int main()
{
int n;
cin>>n;
cout<<climbStairs(n)<<endl;
return 0;
}