递推 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编辑  收藏  举报

导航