HDU 1143 Tri Tiling

#include"stdio.h"
int main()
{
	int T,i,a[31]={1,0,3};
	for(i=4;i<=30;i++)
			a[i]=4*a[i-2]-a[i-4];
	while(~scanf("%d",&T),T+1)
	{	      
        printf("%d\n",a[T]);
	}
	return 0;
}

递推题目  

首先,每相差两个数,就有3种排列情况

然后再考虑的,拼在一起的情况,有2*(.....)省略号为2*(a[i-6] + a[i-4] +......+a[0])  (我假设从6开始)

a[i] = 3*a[i-2] + 2*(a[i-4] + a[i-6] +......+a[0]);

a[i-2] = 3*a[i-4] + 2*(a[i-6] + a[i-8] +......+a[0]);

a[i-2] -a[i-4]= 2*a[i-4] + 2*(a[i-6] + a[i-8] +......+a[0]);

所以,最后可以得到关系式

a[i]=4*a[i-2]-a[i-4];


你可能感兴趣的:(HDU 1143 Tri Tiling)