题意:问n,m的 黑白矩阵,问你有多少种不同的染色方案使得任意一个格子最多只有1个相同颜色的邻居
解:
1、暴力找规律,
2、(1,1)(1,2)(1,3)是一个类似费波那契的规律
3、(1,2)(2,3)(3,4)在费波那契的基础上+2 及 sol(i,j)==sol(i-1,j-1)+sol(i-2,j-2)+2;
猜测这种规律都可以,简单验证同样符合。
#include<bits/stdc++.h>
using namespace std;
#define en '\n'
#define ll long long
ll T;
const ll maxn=1e5+10;
ll rd(){ll tt;scanf("%I64d",&tt);return tt;}
vector<ll>vec;
ll a[2][maxn],n,m;
ll aa[maxn];
const ll mo=1e9+7;
signed main(){
#ifdef swt
freopen("input2.txt","r",stdin);
#endif // swt
//
cin>>n>>m;
if(n>m)swap(n,m);
a[0][1]=2;
a[0][2]=4;
a[1][1]=4;
a[1][2]=6;
for(ll i=3;i<=(m-n+1);i++){
a[0][i]=a[0][i-1]+a[0][i-2];a[0][i]%=mo;
}
for(ll i=3;i<=(m-n+2);i++){
a[1][i]=a[1][i-1]+a[1][i-2]-2;a[1][i]%=mo;a[1][i]+=mo;a[1][i]%=mo;
}
aa[m-n+1]=a[0][m-n+1];
aa[m-n+2]=a[1][m-n+2];
for(ll i=m-n+3;i<=m;i++){
aa[i]=aa[i-1]+aa[i-2]+2;aa[i]%=mo;
}
cout<<aa[m]<<en;
}