很明显若n为奇数肯定放不满(总面积为奇数而砖的面积为偶数)
所以可以将长度为2的面积(3*2)看做一个单位每次都增加这样一个单位(不可能增加奇数长度),这样一个单位单独放有3种方法,
然后考虑两个单位放在一起出现的放法,首先两个单位互不“干扰”就有3*3种,有砖横跨两个单位的只有2种那么就是3*3+2=11种,
然后继续放一个单位,先考虑之前部分(3*4)和新放的单位互不干扰,就有11*3种,然后考虑横跨的横跨两个单位的话那么这两个
单位就只有两种放法,然后乘上第一个没被横跨的单位即2*3=6种,横跨3个单位那么这三个单位就只有2种放发,总共3*11+2*3+2=41种
、、、、就这样递推下去
因为n奇数答案都为0
令n/=2
则有f(n)=3*f(n-1)+2*f(n-2)+2*f(n-3)+...+2*f(1)+2
化简下就是f(n)=4*f(n-1)-f(n-2)
#include<stdio.h>
#include<string.h>
#define MAXN 20
int ans[MAXN];
int main()
{
    ans[0]=1;//不懂这个数据想表达什么?为什么不是0?
    ans[1]=3,ans[2]=11;
    for(int i=3;i<=15;i++)
        ans[i]=ans[i-1]*4-ans[i-2];
    int n;
    while(scanf("%d",&n)!=EOF&&(n!=-1))
    {
        if(n%2) printf("0\n");
        else printf("%d\n",ans[n/2]);
    }
    return 0;
} 
                   
                   
                   
                   
                             本文详细解释了如何使用递归算法和动态规划解决POJ2663 TriTiling问题。通过分析问题特性,作者将奇数情况排除,并引入单位概念进行逐步递推,最终简化为动态规划形式。文章包括关键步骤的数学推导和代码实现,帮助读者理解并解决类似问题。
本文详细解释了如何使用递归算法和动态规划解决POJ2663 TriTiling问题。通过分析问题特性,作者将奇数情况排除,并引入单位概念进行逐步递推,最终简化为动态规划形式。文章包括关键步骤的数学推导和代码实现,帮助读者理解并解决类似问题。
           
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   718
					718
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            