hdu-5686 Problem B(斐波那契数列)
Posted LittlePointer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu-5686 Problem B(斐波那契数列)相关的知识,希望对你有一定的参考价值。
题目链接:
Problem B
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
Problem Description
度熊面前有一个全是由1构成的字符串,被称为全1序列。你可以合并任意相邻的两个1,从而形成一个新的序列。对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列。
Input
这里包括多组测试数据,每组测试数据包含一个正整数N,代表全1序列的长度。
1≤N≤200
1≤N≤200
Output
对于每组测试数据,输出一个整数,代表由题目中所给定的全1序列所能形成的新序列的数量。
Sample Input
1
3
5
Sample Output
1
3
8
题意:
思路:
可以发现是一个斐波那契数列,可以这样考虑,当多加一个1时,加的这个1可以和前边的合并,这时是dp[i-2]种方案,不和前边合并是dp[i-1]种方案,所以dp[i]=dp[i-1]+dp[i-2];
n太大,long long也不够用,所以就用数组模拟加法计算啦
AC代码:
//#include <bits/stdc++.h> #include <iostream> #include <queue> #include <cmath> #include <map> #include <cstring> #include <algorithm> #include <cstdio> using namespace std; #define Riep(n) for(int i=1;i<=n;i++) #define Riop(n) for(int i=0;i<n;i++) #define Rjep(n) for(int j=1;j<=n;j++) #define Rjop(n) for(int j=0;j<n;j++) #define mst(ss,b) memset(ss,b,sizeof(ss)); typedef long long LL; const LL mod=1e9+7; const double PI=acos(-1.0); const int inf=0x3f3f3f3f; const int N=1e5+25; int n; LL dp[205]; int str[205][202],dis[205]; int fun() { mst(str,0); str[1][0]=1; str[2][0]=2; dis[1]=1; dis[2]=1; for(int i=3;i<202;i++) { for(int j=0;j<=200;j++) { str[i][j]+=str[i-1][j]+str[i-2][j]; // str[i][j+1]+=(str[i-1][j]+str[i-2][j])/10; } for(int j=0;j<=200;j++) { str[i][j+1]+=str[i][j]/10; str[i][j]%=10; } } } int main() { fun(); while(scanf("%d",&n)!=EOF) { for(int i=198;i>=0;i--) { if(str[n][i]!=0) { for(int j=i;j>=0;j--)printf("%d",str[n][j]); break; } } printf("\n"); } return 0; }
以上是关于hdu-5686 Problem B(斐波那契数列)的主要内容,如果未能解决你的问题,请参考以下文章