解题思路:首先我们定义dp[i]为i列时候铺砖的方法数,我们考虑2 * 2的时候,一共有3个方法,考虑3 * 2的时候,多出了一列,如果我们竖着直接放一个,方法数就和2 * 2时候一样,即3,也就是dp[i-1]个方法数,如果我们对3的后两列进行铺砖,我们只能横着放两个和竖着放一大个,为什么不能竖着放2个呢,因为这时候的方法数其实就和前面重叠了,所以只能加上2 * dp[i-2]。
所以得出:dp[i]=(dp[i-1]+2*dp[i-2])%100007;
#include<stdio.h>
int dp[255];
int main(){
int n;
scanf("%d",&n);
dp[0]=1;
dp[1]=1;
for(int i=2;i<=n;i++){
dp[i]=(dp[i-1]+2*dp[i-2])%100007;//及时取模
}
printf("%d\n",dp[n]);
return 0;
}