欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HDU -> ACM ->超级楼梯

程序员文章站 2022-04-18 12:13:57
...
Problem Description
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
 

Input
输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。
 

Output
对于每个测试实例,请输出不同走法的数量
 

Sample Input

2
2
3
 

Sample Output

1
2
 

Author
lcy
 
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[40];
    int i;
    a[0] = 1;   //二层
    a[1] = 2;   //三层
    for(i = 2; i < 40; i++)
    {
        a[i] = a[i - 1] + a[i - 2]; //第n阶楼梯走法为(n - 1)阶楼梯 走法+  (n - 2)阶楼梯走法
    }

    int n;
    scanf("%d", &n);
    while(n--)
    {
        int stair;
        scanf("%d", &stair);
        printf("%d\n", a[stair - 2]);
    }
    return 0;
}
简单的动态规划问题:注意到每增加一层楼梯,那么登上这层楼梯的方法有两种:1.从比他少一阶的楼梯往上走一步
2.从比他少两阶的楼梯往上走两步

入果要求第n阶楼梯的走法,那么我们只需知道(n-1)和(n -2)阶楼梯所有的走法即可,以此类推;
我们只需直到第二阶楼梯和第三阶楼梯的走法就能推出剩下楼梯走法啦~(类似于斐波那契数列)