问题分析:将12型的骨牌填充到mn的棋盘当中,使其完全覆盖而且任何骨牌不能重叠。将问题缩小成同类型子问题。
思路:先从2n和3n的棋盘入手看其然后将其进行对更大的棋盘执行覆盖,再使用排列组合问题进行求解问题。
奇数列不能填充,扩大最小项为两列一单位记函数f(n)f(n)f(n)为在n nn列时的覆盖方案数目,f(0)=1f(0)=1f(0)=1,f(2)f(2)f(2)我们以两列为一个单位,他与f ( 0 )的排列总数有关,而f ( 2 ) = 3 是0号位置的排列数目之和*[1-2]位置的排列方法数目,因此初始化为1. 再来看看f(4) f(4)f(4),图Ⅰ。首先考虑他最右边两列有三种情况,承上之前的排列数即f(2)*3f(2)*3f(2)∗3,四列也可能为图Ⅱ,得出f(0)*2f(0)*2f(0)*2。
递推得出f(n)=3f(n-2)+2f(n-4)+2f(n-6)+…+f(0)
#include<bits/stdc++。h>
using namespace std;
const int maxn=1<<12;