/*
1.构建一个3*4的表格
0 1 2 3
4 5 6 7
8 9 10 11(方便检测)
2.输入每一个可能的填方格数
3.检测该方格是否满足题意
4.增量
#include<bits/stdc++.h>
using namespace std;
int ans=0;
bool a[3][4];
int b[6];
bool check(){
int d=0;
for(int i=1;i<=5;i++){
int x=b[i]/4;
int y=b[i]%4;
if(b[i]>3&&a[x-1][y]==true) d++;
if(b[i]<8&&a[x+1][y]==true) d++;
if(y!=0&&a[x][y-1]==true) d++;
if(y!=3&&a[x][y+1]==true) d++;
}
if(d>=8) return true;
return false;
}
void dfs(int index){
if(index==6){
if(check()) ans++;
return;
}
for(int i=b[index-1]+1;i<=11;i++){
b[index]=i;
a[i/4][i%4]=true;
dfs(index+1);
a[i/4][i%4]=false;
b[index]=-1;
}/*b[index-1]+1保证了代码不会重复*/
return;
}
int main(){
memset(b,-1,sizeof(b));
dfs(1);
cout<<ans-20;/*检测时存在漏网之鱼,如:
1011
0011
0000
实则不满足条件,但检测通过,有心人易看出共20个*/
}