递推公式如下:
T(2)=3 ;
T(0)=1;
T(2*k-1)=0
T(2*k)=3*T(2*k-2)+2*(T(2*k-4)+T(2*k-6)+..+T(2) +T(0))
代码如下(两个效率都为312k,0ms):
Code1
1 #include<stdio.h>
2 __int64 t[32];
3 void process()
4 {
5 int i,j;
6 t[0]=1;t[1]=0;t[2]=3;
7 for(i=3;i<31;i++)
8 {
9 if(i%2!=0)
10 t[i]=0;
11 else
12 {
13 t[i]=t[i-2]*3+2;
14 for(j=i-4;j>=2;j-=2)
15 t[i]+=2*t[j];
16 }
17 }
18 }
19 int main()
20 {
21 int n,i;
22 process();
23 while(scanf("%d",&n),n!=-1)
24 printf("%I64d\n",t[n]);
25
26 return 0;
27 }
Code
1 #include<stdio.h>
2 __int64 t[32];
3 __int64 process(int n)
4 {
5 int i;
6 if(n==2) return 3;
7 if(n%2==1) return 0;
8 if(t[n]!=0) return t[n];
9 t[n]=3*process(n-2)+2;
10 for(i=n-4;i>=2;i-=2)
11 t[n]+=2*process(i);
12 return t[n];
13 }
14 int main()
15 {
16 int n,i;
17 for(i=0;i<32;i++)
18 t[i]=0;
19 while(scanf("%d",&n),n!=-1)
20 {
21 if(n==0)
22 printf("1\n");
23 else
24 printf("%I64d\n",process(n));
25 }
26 return 0;
27 }
28