ACM PKU 2663 Tri Tiling http://acm.pku.edu.cn/JudgeOnline/problem?id=2663
这题开始没有思路,后来看了流牛的解题报告才写出来;
递推公式我写一下:
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; }