蒜头君自从春节回来以后,体重就像加了特技一样duang~duang~地暴增起来。于是小蒜头打算每天爬楼梯来燃烧体内的脂肪(咦?蒜怎么会有脂肪=.=)。蒜头在爬楼梯的时候脑洞大开,因为蒜头腿短,爬楼梯的时候一次只能迈1级或2级台阶,它就想到了,假如一共有n级台阶的话,它一共有多少种方法能够爬到楼梯顶部呢? 聪明的你快来帮帮小蒜头吧~建议你使用动态规划求解哦,直接搜索是会超时的^o^ 输入格式: 第一行输入一个数n(n<=50),代表楼梯的级数。 输出格式: 第一行输出你的方法总数。 样例1 输入: 5 输出: 8
<img src="https://img-blog.csdn.net/20160403000122505?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
这里假设总共8级楼梯,开个数组stairs[8],默认值为0,
假如我们最后走到第八级,那么依据题意可以从
第六级也可以从第七级走到第八级,那么走到第八级的
总的方法就是走到第六级的方法加上走到第七级的方法,
而走到第六级的方法可以由第四级和第五级得到,第七级可以
由第五级和第六级得到,依次类推,第三级可以由第一级和第二级
得到,所以可以推出这个式子,stairs[i] = stairs[i-1] + stairs[i-2];
而第一级和第二级可以马上看出来分别为1种和2种方法,所以
马上的每个台阶的方法数就可以根据这个推出来的式子求解了
#include"iostream"
using namespace std;
int main()
{
int stairs[50]{0};
stairs[0] = 1;
stairs[1] = 2;
for(int i = 2; i < 50; i++)
{
stairs[i] = stairs[i-1] + stairs[i-2];
}
int num;
cin>>num;
cout<<stairs[num-1]<<endl;
return 0;
}