zoukankan      html  css  js  c++  java
  • nyoj 76-超级台阶 (递推)

    76-超级台阶


    内存限制:64MB 时间限制:1000ms 特判: No
    通过数:8 提交数:12 难度:3

    题目描述:

    有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法?

    注:规定从一级到一级有0种走法。

    输入描述:

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

    输出描述:

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

    样例输入:

    2
    2
    3

    样例输出:

    1
    2

    分析:
      1、第m阶的走法应该是前面m-1阶的走法 + 前面m-2阶的走法;
      2、m-1的走法就表示最后只走一个台阶,m-2的走法表示最后上两个台阶;
      PS:所以我们可以类推,如果最初有三种走法即就是上1、2、3阶,那么当前的走法 = f[m-1] + f[m-2] + f[m-3].

    核心代码:
      
    1 for(int i = 4; i <= MAXN; ++ i)
    2 {
    3     f[i] = f[i-1] + f[i-2];
    4 }

    C/C++代码实现(AC):

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cstring>
     4 #include <cstdio>
     5 #include <cmath>
     6 #include <stack>
     7 #include <map>
     8 #include <queue>
     9 #include <set>
    10 
    11 using namespace std;
    12 const int MAXN = 45;
    13 int f[MAXN] = {0, 0, 1, 2};
    14 
    15 void cal_excel()
    16 {
    17     for(int i = 4; i < MAXN; ++ i)
    18         f[i] = f[i-1] + f[i-2];
    19 }
    20 
    21 int main()
    22 {
    23     int t;
    24     cal_excel();
    25     scanf("%d", &t);
    26     while(t --)
    27     {
    28         int m;
    29         scanf("%d", &m);
    30         printf("%d
    ", f[m]);
    31     }
    32     return 0;
    33 }
  • 相关阅读:
    JAVA Shallow heap & Retained heap
    JAVA-堆区,栈区,方法区。
    Android经典的设计模式
    Android 绘制view的小知识点
    Android View的滑动 动画
    Android开发aidl使用中linkToDeath和unlinkToDeath的使用
    Android任务栈的运行规律
    Android 通过httppost上传文本文件到服务器。
    Android中的Libraries以及Order and Export的使用。
    drawable微技巧以及layout的小知识
  • 原文地址:https://www.cnblogs.com/GetcharZp/p/9112672.html
Copyright © 2011-2022 走看看