zoukankan      html  css  js  c++  java
  • HDU

    Description

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

    Input

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

    Output

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

     题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2041

    *************************************************

    解题思路:运用斐波纳契数列

    斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)

    由题目可知,每次只能走一级或两级。
    因此从第一级走上第二级只能走一步,只有1种走法。
    从第一级走上第三级,可以从第一级直接走两步,也可以从第二级走一步。有2种走法
    走上第n级,可以从第n-1级走一步上来,也可以从第n-2级走两步上来。

    即:
    f(2) = 1
    f(3) = 2
    f(n) = f(n-1) + f(n-2) (n > 3)

    是一个斐波纳契数函数。 

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 #include<queue>
     5 #include<algorithm>
     6 #include<cmath>
     7 #include<iostream>
     8 
     9 using namespace std;
    10 typedef long long LL;
    11 
    12 #define INF 0x3f3f3f3f
    13 #define N 22000
    14 #define MAXN 100000000
    15 #define mod 1000000007
    16 
    17 long long dp[60];
    18 
    19 int main()
    20 {
    21     int i,T,n;
    22     dp[1]=1;
    23     dp[2]=1;
    24     for(i=3;i<60;i++)
    25         dp[i]=dp[i-1]+dp[i-2];
    26 
    27     scanf("%d", &T);
    28 
    29     while(T--)
    30     {
    31         scanf("%d", &n);
    32 
    33         printf("%lld
    ", dp[n]);
    34     }
    35     return 0;
    36 }
  • 相关阅读:
    平时十六测
    平时十五测
    平时十四测
    poj 1486 Sorting Slides
    POJ 3621Sightseeing Cows
    POJ 2728 Desert King
    POJ3111 K Best
    NOIopenjudge 407:Heritage
    POJ#2065. SETI
    HDU 4607 Park Visit
  • 原文地址:https://www.cnblogs.com/weiyuan/p/5747607.html
Copyright © 2011-2022 走看看