要求不能对齐的铺砖问题

最近遇到了一个很有意思的铺砖问题,不同于以往的常规问题,这个新问题中对铺砖的方式进行了规划。本人并非编程专业出身,这个问题想了很久也是想不明白,希望平台大神们能够指点一二

具体来说是这样的,给定一个 H x W 的范围,以及两种砖块(1x2 和 1x3)。除了常规要求,既砖块不能重和以外,还要求每两行之间砖缝不能对齐。问总共有多少种铺砖方法。

目前已经可以使用递归的方法来寻找所有铺砖的方法。困扰的问题在于,如何在递归中实现“砖缝不能对齐”的要求。求各位大神帮忙,在此先谢过了!

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
#include<iostream>
#include<cstdio>
using namespace std;
const int N=255,mod=100007;
int dp[N];
int main(){
    freopen("wall.in","r",stdin);
    freopen("wall.out","w",stdout);
    dp[1]=1;
    dp[2]=3;
    for (int i=3;i<=N;i++){
        dp[i]=(dp[i-1]%mod+2*dp[i-2]%mod)%mod;
    }
    int n;
    cin>>n;
    cout<<dp[n]<<endl;
    return 0;
}