题目
有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或者二级,要走上m级,共有多少走法?注:规定从一级到一级有0种走法。
给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100。为了防止溢出,请返回结果Mod 1000000007的值。
测试样例: 输入:3 返回:2
- #include <iostream>
- #include <cstdio>
- using namespace std;
- const int maxn = 41;
- int dp[maxn];
- void prepare(){
- if(n==0)
return 0;
if(n==1||n==2)
return 1;
if(n==3)
return 2;
int *s = new int[101];
s[0]=0;
s[1]=0;
s[2]=1;
s[3]=2;
for(int i=4;i<=n;i++)
{
s[i]=(s[i-2]+s[i-1])%1000000007;
}
return s[n]; - /**
- * 逆向思考。要想走到M级,可以分为2种情况。
- * 1)从m-2级迈两步
- * 2)从m-1级迈一步
- */
- }
- int main(){
- prepare();
- int t;
- scanf(“%d”,&t);
- while(t–){
- int n;
- scanf(“%d”,&n);
- printf(“%d\n”,dp[n-1]);
- }
- return 0;
- }