Computer Transformation
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6946 Accepted Submission(s): 2515
Problem Description
A
sequence consisting of one digit, the number 1 is initially written
into a computer. At each successive time step, the computer
simultaneously tranforms each digit 0 into the sequence 1 0 and each
digit 1 into the sequence 0 1. So, after the first time step, the
sequence 0 1 is obtained; after the second, the sequence 1 0 0 1, after
the third, the sequence 0 1 1 0 1 0 0 1 and so on.
How many pairs of consequitive zeroes will appear in the sequence after n steps?
How many pairs of consequitive zeroes will appear in the sequence after n steps?
Input
Every input line contains one natural number n (0 < n ≤1000).
Output
For each input n print the number of consecutive zeroes pairs that will appear in the sequence after n steps.
Sample Input
2
3
Sample Output
1
1
题解:f(n)=2*f(n-2)+f(n-1)由于每个n-2的00生成两个01,在n的地方就会生成两个00;n-1的00在n生成一个00;由此可以找出规律;
代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 using namespace std; 7 #define mem(x,y) memset(x,y,sizeof(x)) 8 typedef long long LL; 9 const int MAXN=1010; 10 char dp[MAXN][MAXN]; 11 char c[MAXN]; 12 int x[MAXN],y[MAXN],z[MAXN]; 13 void bigsum(char *a,char *b){ 14 int len1,len2; 15 mem(x,0);mem(y,0);mem(z,0); 16 len1=strlen(a);len2=strlen(b); 17 int len=max(len1,len2); 18 for(int i=len1-1,j=0;i>=0;i--,j++)x[j]=a[i]-'0'; 19 for(int i=len2-1,j=0;i>=0;i--,j++)y[j]=b[i]-'0'; 20 for(int i=0;i<len;i++){ 21 z[i]=x[i]+y[i]+z[i]; 22 z[i+1]+=z[i]/10; 23 z[i]%=10; 24 if(z[len])len++; 25 } 26 for(int i=len-1,j=0;i>=0;i--,j++)c[j]=z[i]+'0'; 27 c[len]='