hdoj 1865 1sting

来源:互联网 发布:域名备案有什么用 编辑:程序博客网 时间:2024/05/17 19:18

1sting

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4157    Accepted Submission(s): 1564


Problem Description
You will be given a string which only contains ‘1’; You can merge two adjacent ‘1’ to be ‘2’, or leave the ‘1’ there. Surly, you may get many different results. For example, given 1111 , you can get 1111, 121, 112,211,22. Now, your work is to find the total number of result you can get.
 

Input
The first line is a number n refers to the number of test cases. Then n lines follows, each line has a string made up of ‘1’ . The maximum length of the sequence is 200.
 

Output
The output contain n lines, each line output the number of result you can get .
 

Sample Input
311111111
 

Sample Output
128
 
 
思路:这是一道大数题,规律是斐波那契,因为要两个数相加,将这两个数都放到数组中去,因为有l=strlen(s)个数,所以用二维数组记录。
 
 
代码:
 
#include<stdio.h>#include<stdlib.h>#include<string.h>int num[300][1000];char s[1000];int main(){int i,n,l,len,k,j;scanf("%d",&n);while(n--){    scanf("%s",s);l=strlen(s);memset(num,0,sizeof(num));num[1][1]=1;num[2][1]=2;len=1;for(i=3;i<=l;i++){for(k=1;k<=len;k++){num[i][k]=num[i][k]+num[i-1][k]+num[i-2][k];if(num[i][k]>9){num[i][k+1]+=num[i][k]/10;num[i][k]%=10;}if(num[i][len+1]){len++;}}}for(i=len;i>=1;i--){printf("%c",num[l][i]+'0');}printf("\n");}return 0;} 

0 0
原创粉丝点击