hdu 2209 翻纸牌游戏

来源:互联网 发布:cf体验服网络出现异常 编辑:程序博客网 时间:2024/05/16 11:07

http://acm.hdu.edu.cn/showproblem.php?pid=2209

分析:第1张牌的状态只受两种影响:自己和第2张牌;判断前一张牌是否为正面


#include <iostream>#include <cstring>#include <cstdio>#include <queue>using namespace std;const int NM=25;int mmin,len,a[NM];bool flag;char str[NM];void DFS(int t,int k){    if(t==len){for(int i=0;i<len;i++){if(a[i]) break;}        if(i==len){            flag=true;            if(k<mmin) mmin=k;        }        return;    }    if(a[t-1]==1){        a[t-1]=1-a[t-1];a[t]=1-a[t];a[t+1]=1-a[t+1];DFS(t+1,k+1);a[t-1]=1-a[t-1];a[t]=1-a[t];a[t+1]=1-a[t+1];    }    DFS(t+1,k);}int main(){    while(~scanf("%s",str)){        len=strlen(str);        for(int i=0;i<len;i++) a[i]=str[i]-'0';        mmin=0xfffffff;flag=false;        DFS(1,0);  //第1张牌不动a[0]=1-a[0];a[1]=1-a[1];  //第1张牌翻转DFS(1,1);        if(flag) printf("%d\n",mmin);        else printf("NO\n");    }    return 0;}


0 0
原创粉丝点击