• 【校算法训练解题报告1】-Problem D: 漫长的旅程


    版权声明:本文为 @iCurious
    的原创文章,可以转载,但请务必注明作者和出处!!!
    原文链接:|blog.csdn.net/icurious|www.blankspace.cn|www.cnblogs.com/icurious/|

    Problem D: 漫长的旅程

    问题描述Description

    这次ACM/ICPC亚洲赛结束,我们从xx赛区要经过十分漫长的旅程才能返回xx,所以我们不得不找点有趣的事情做(比如说出这次比赛的题目…o(>﹏<)o)我们就想呀,这个火车就不能少停几站吗?当然,铁老大是不会同意滴。不过,铁老大也并非这么死板,火车沿途也不是所有站台都停靠,偶尔也是会跳过一些小站的。铁老大表示,可以跳过一些小站,但是绝对不能连续跳过两站及以上,否则又要成为众矢之的了。现在,某条线上一共有m个站台(火车初始停靠在第一站),铁老大想知道一共有多少种停站方案可供选择,你能帮助铁老大解决这个问题吗?

    Input

    输入数据首先包含一个整数N(N<=40),表示测试实例的个数,然后是N行数据,每行包含一个整数M(2<=M<=40),表示该线站台的数量。

    Output

    每组输出仅有一行,包含一个整数,表示可供选择的方案数。

    Sample Input

    2
    2
    3

    Sample Output

    1
    2

    算法/思路

    本题的实质是经典的“走楼梯问题”,有一个M级的台阶,每次可以走1级或者2级,问走上台阶总共有多少种走法。
    if M=1,f(M=1)=1
    if M=2,f(M=2)=2,可能是从第0级,一下子走2级,或者0->1->2一次走一级。
    if M=i,已经走到可第i级台阶了,那是怎么走上来的呢?可能是从第i-1级台阶走一步上来的,也可能是从第i-2级台阶走两部上来的,所以:
    f(M=i)=f(M=i-1)+f(M=i-2),或者直接写成f(n)=f(n-1)+f(n-2),典型的斐波那契数列!!!

    算法实现

    #include<iostream>
    using namespace std;
    int fib(int n){return (n<=2)?1:fib(n-1)+fib(n-2);}
    int main()
    {int M=0,n=0;cin>>M;while(M--){cin>>n;cout<<fib(n)<<endl;}}
    

    版权声明:本文为 @iCurious
    的原创文章,可以转载,但请务必注明作者和出处!!!
    原文链接:
    |blog.csdn.net/icurious|www.blankspace.cn|www.cnblogs.com/icurious/|

  • 相关阅读:
    吃透空洞卷积(Dilated Convolutions)
    CondInst:性能和速度均超越Mask RCNN的实例分割模型
    图像处理基础:颜色空间及其OpenCV实现
    caffe模型转rknn模型的方法
    探索 YOLO v3 源码
    探索 YOLO v3 源码
    事件
    组合,模板,bolck块
    WXSS学习
    其他组件
  • 原文地址:https://www.cnblogs.com/icurious/p/6082161.html
Copyright © 2020-2023  润新知