POJ-2663-Tri Tiling
解题报告:
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; }