95. 费解的开关二级制枚举

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了95. 费解的开关二级制枚举相关的知识,希望对你有一定的参考价值。


二进制枚举第一行的操作状态。

#include<bits/stdc++.h>
using namespace std;
const int N=30;
char a[N][N],b[N][N];
int n,ans;
int dx[5]=0,-1,0,0,1;
int dy[5]=0,0,-1,1,0;
char get(char c)

    if(c=='0') return '1';
    else return '0';

void solve(int x,int y)

    for(int i=0;i<5;i++)
    
        int tempx=x+dx[i],tempy=y+dy[i];
        if(tempx>=0&&tempx<5&&tempy>=0&&tempy<5) 
            a[tempx][tempy]=get(a[tempx][tempy]);
    

void dfs(int x)

    memcpy(a,b,sizeof b);
    int cnt=0,flag=1;
    for(int i=0;i<5;i++) if((x>>i)&1) solve(0,i),cnt++;
    for(int i=1;i<5;i++)
        for(int j=0;j<5;j++) if(a[i-1][j]=='0') solve(i,j),cnt++;
    for(int i=0;i<5;i++) if(a[4][i]=='0') flag=0;
    if(flag) ans=min(ans,cnt);

int main(void)

    cin>>n;
    while(n--)
    
        for(int i=0;i<5;i++)
            for(int j=0;j<5;j++) 
                cin>>a[i][j],b[i][j]=a[i][j];
        ans=7;
        for(int i=0;i<(1<<5);i++) dfs(i);
        printf("%d\\n",ans>6?-1:ans);
    
    return 0;

以上是关于95. 费解的开关二级制枚举的主要内容,如果未能解决你的问题,请参考以下文章

95. 费解的开关(Acwing)(分析+递推)

95. 费解的开关

题解AcWing95费解的开关

AcWing95 费解的开关 (递推)

95. 费解的开关

95. 费解的开关