问题 V: 光棍的yy
时间限制: 1 Sec 内存限制: 128 MB 提交: 42 解决: 22 [提交][状态][讨论版]题目描述
-
yy经常遇见一个奇怪的事情,每当他看时间的时候总会看见11:11,这个很纠结啊。
现在给你m个1,你可以把2个1组合成一个2,这样就不是光棍了,问这样的组合有多少种??
例如(111 可以拆分为 111 12 21 有三种)
输入
第一行输入一个n表示有n个测试数据 以下n行,每行输入m个1 (1 <= n,m <= 200)
输出
输出这种组合种数,占一行
样例输入
3
11
111
11111
样例输出
2
3
8
这个题实际上就是求前200个斐波那契数列+大数
1 #include <iostream> 2 #include <string.h> 3 using namespace std; 4 5 char a[222]; 6 int tag; 7 int f[222][1111],t; 8 9 void fb() 10 { 11 int i,j; 12 memset(f,0,sizeof(f)); 13 f[0][0]=f[1][0]=1; 14 for(i=2;i<222;i++) 15 { 16 tag=0; 17 for(j=0;j<=200;j++) 18 { 19 tag=f[i-1][j]+f[i-2][j]+tag; 20 f[i][j]=tag%10; 21 tag/=10; 22 } 23 } 24 } 25 26 int main() 27 { 28 int na,i,j; 29 fb(); 30 while(cin>>t) 31 { 32 while(t--) 33 { 34 cin>>a; 35 na=strlen(a); 36 for(i=200;i>=0;i--) 37 { 38 if(f[na][i]!=0) 39 break; 40 } 41 for(j=i;j>=0;j--) 42 { 43 cout<<f[na][j]; 44 } 45 cout<<endl; 46 } 47 } 48 return 0; 49 }