递推 HDU 1143
n%2==1
0
n%2==0
右边和左边没影响 右边的 * 左边的
z[n]=3*z[n-2]+2*z[n-4]+...2*z[0];
z[n-2]=3*z[n-4]+2*z[n-6]+...2*z[0];
z[n]=4*z[n-2]-z[n-4];
z[0]=1;
z[2]=3
#include<stdio.h> #include<string.h> #include<algorithm> #include<math.h> using namespace std; #define MAXN 105 long long z[45]; int main() { int n; z[0]=1; z[1]=0; z[2]=3; for(int i=3;i<=30;i++) { if(i%2==0) z[i]=4*z[i-2]-z[i-4]; else z[i]=0; } while(scanf("%d",&n)!=EOF) { if(n==-1) break; printf("%lld\n",z[n]); } return 0; }
posted on 2016-12-30 08:55 HelloWorld!--By-MJY 阅读(96) 评论(0) 编辑 收藏 举报