暴力枚举或DP
如果确定了第一行是否有雷,就可以根据第一行的数字推出第二行,进而第三行。。。于是可以暴力枚举第一行的状态来搞
然而我想复杂了,记f[i][sta]表示到第i行,i的前三行的状态为sta的方案数。。。
#include<cstdio>
#define N 10005
int f[N][1<<3], a[N];
int main()
{
int n;
scanf("%d",&n);
f[0][0]=1;
for(int i = 1; i <= n; i++)
scanf("%d",&a[i]);
for(int i = 1, ii = n+1; i <= ii; i++)
for(int s = 0, ss = 1<<3; s < ss; s++)
{
int cnt=0;
for(int k = 1; k <= 4; k<<=1)
if(s&k)
cnt++;
if(i>1 && cnt!=a[i-1])continue;
f[i][s]=f[i-1][(s>>1)|(1<<2)]+f[i-1][(s>>1)];
}
int ans=0;
for(int s = 0, ss = 1<<2; s < ss; s++)
ans+=f[n+1][s<<1];
printf("%d\n",ans);
}