题目大意是用1*2的骨牌堆积成4*N的矩形,一共有多少种方法,N不超过10^9。
这题和曾经在庞果网上做过的一道木块砌墙几乎一样。因为骨牌我们可以横着放,竖着放,我们假设以4为列,N为行这样去看,并且在骨牌覆盖的位置上置1,所以一共最多有16种状态。我们在第M行放骨牌的时候,第M+1行的状态也是有可能被改变的,设S(i,j)表示某一行状态为i时,将其铺满后下一行状态为j的方案书。考虑下如果我们让矩阵S和S相乘会有什么意义,考虑一下会发现S*S的意义当某行状态为i,接着其后面第2行的状态为j的可行方案数,一般地,S^n则代表接下来第n行状态为j的方案数,这里N很大,我们可以用快速幂对矩阵的幂进行加速。对于S矩阵的最初状态我们可以穷尽搜索来求。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include