就是模拟搜索,也可以记忆化提高速度
期末结束后的第一发水题
寒假,加油吧
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAX=12;
int map[12]={1,2,4,8,16,32,64,128,256,512,1024,2048},minus;
void dfs(int state,int left){
//printf("a");
if(left<minus)
minus=left;
for(int i=0;i<MAX;i++){
if((state&map[i])&&(state&map[i+1])&&(i+2<MAX&&!(state&map[i+2])))
dfs(state-map[i+1]-map[i]+map[i+2],left-1);
if((state&map[i])&&(state&map[i-1])&&(i-2>=0&&!(state&map[i-2])))
dfs(state-map[i-1]-map[i]+map[i-2],left-1);
}
}
int main(){
int T,start,all;
char s[15];
scanf("%d",&T);
getchar();
while(T--){
gets(s);
start=0,all=0,minus=12;
for(int i=0;i<MAX;i++){
if(s[i]=='o'){
start+=map[i];
all++;
}
}
dfs(start,all);
printf("%d\n",minus);
}
return 0;
}