这题开始没有思路,后来看了流牛的解题报告才写出来;
递推公式我写一下:
sign[i] = 1 (当i == 0 时,具体为什么我也没有具体的说明方法)
0 (i % 2 != 0) 根据图最先想到的一定是这个;
3*sign[i-2] + 2*(sign[i-4] + sign[i-6]+......+sign[2]); (这个就是要将拿来的这个往里 面插有重复的情况会有一种抵消!)
#include <iostream>
using namespace std;
int sign[31];void init()
{
int i ;
int temp = 0;
sign[0] = 1;
sign[2] = 3;
for (i = 3; i <= 30; i++)
{if (i % 2 != 0)sign[i] = 0;else { temp += sign[i-4]; sign[i] = 3*sign[i-2] + 2 * temp;}
}
}
int main ()
{
int n;
init();while (cin >> n && n != -1)
{cout << sign[n]<<endl;
}
return 0;
}