爬楼梯【动态规划】 计蒜客

假设你现在正在爬楼梯,楼梯有 n 级。每次你只能爬 1 级或者 2 级,那么你有多少种方法爬到楼梯的顶部?

输入格式

第一行输入一个整数 n(1≤n≤50)  n(1\leq n \leq 50)     n(1n50),代表楼梯的级数。

输出格式

输出爬到楼梯顶部的方法总数。

样例输入

5

样例输出

8

分析:分析:假设从底走到第n级的走法有dp[n]种,走到第n级有两个方法,
一个是从(n-1)级走一步,另一个是从第(n-2)级走两步,
前者有dp[n-1]种方法,后者有dp[n-2]种方法,
所以有dp[n] = dp[n-1] + dp[n-2],还有dp[0]=0,dp[1]=1,dp[2]=2。

#include<iostream>
using namespace std;
int dp[100];
int calStepDP(int n)
{
 //动态规划
 dp[0]=0;
 dp[1]=1;
 dp[2]=2;
 int i;
 for(i=3;i<=n;i++){
  dp[i]=dp[i-1]+dp[i-2];
 }
 return dp[n];
 }
 int main(int arhc,char **argv){
  int n;
  scanf("%d",&n);
  int ans;
  ans=calStepDP(n);
  printf("%d\n",ans);
  return 0;
 }
 
 

posted on 2018-04-13 15:15  沙漏,为谁转  阅读(93)  评论(0)    收藏  举报

导航