题目链接: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)
是一个斐波纳契数函数。
Sample Input 2 2 3 Sample Output 1 2
*************************************************
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\n", dp[n]); 34 } 35 return 0; 36 }
时间: 2024-12-24 07:17:36