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;
}

posted on 2011-05-06 18:38  _Clarence  阅读(176)  评论(0编辑  收藏  举报

导航