解题报告:
1、subproblems:
2、A(n) = A(n-2) + 2 * B(n-1)
3、B(n) = A(n-1) + D(n-1)
4、D(n) = B(n-1)
4、由此可得:
A(n) = A(n-2) + 2 * B(n-1)
A(n) = 3*A(n-2) + 2 * B(n-3)
A(n) = 3*A(n-2) + 2 * A(n-4) + 2 * B(n-5)
...
AC代码:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int i, j, n, tmp, buf[31];
memset(buf, 0, sizeof(buf));
buf[0] = 1;
buf[2] = 3;
for(i = 4; i <= 30; i += 2)
{
tmp = 3 * buf[i-2];
for(j = 4; j <= i; j += 2)
tmp += 2 * buf[i-j];
buf[i] = tmp;
}
while(cin >> n && n != -1)
cout << buf[n] << endl;
return 0;
}