asuml

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

问题 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 }

 

posted on 2016-07-15 16:14  asuml  阅读(178)  评论(0编辑  收藏  举报