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

#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. 费解的开关【二级制枚举】相关推荐

  1. AcWing 95. 费解的开关(指数型枚举)

    95. 费解的开关 题意: 给定一个5x5的方格,共25盏灯 每盏灯有开和关两种状态 每次操作一盏灯时,以该灯为中心的十字形状范围的灯都会改变状态 找到用最少的操作步数使所有的灯都亮着,当步数超过6时 ...

  2. AcWing 95. 费解的开关 Python详解

    一.算法思想--递推(详细证明见算法竞赛进阶指南原书) 1)若固定第1行,则方案至多只有1种 2)把第1行的所有情况遍历,先把亮着的灯全部关闭 3)遍历前4行,如果灯是关着的,就把下1行同1列的灯改变 ...

  3. 《算法竞赛进阶指南》打卡-基本算法-AcWing 95. 费解的开关:位运算、枚举、递推

    文章目录 题目解答 题目来源 题目解答 分析: 枚举第一行,指的是第一行哪些位置要切换状态!!!.第一行总共有5个数,组合数是32,即第一行哪些位置要切换总共有32种情况.这就是我们的枚举空间.比如, ...

  4. 题解【acwing】95 费解的开关

    题目描述 点击进入题目 你玩过"拉灯"游戏吗?25盏灯排成一个5x5的方形.每一个灯都有一个开关,游戏者可以改变它的状态.每一步,游戏者可以改变某一个灯的状态.游戏者改变一个灯的状 ...

  5. AcWing 95. 费解的开关

    原题链接:https://www.acwing.com/problem/content/97/ 看了前几篇题解和y总的视频讲解,总有一个奇怪的点搞不明白,为什么说第一行确定了,第二行就确定了,第三行接 ...

  6. 【结论】【dfs】费解的开关(joyoi-tyvj 1266)

    费解的开关 joyoi-tyvj 1266 题目大意: 有5*5的一个图,每个点的数值是1或0,如果将一个点的数值取反,那这个点上下左右的点都会取反,现在问你将所有点都变为1最少要多少步,如果步数大于 ...

  7. Python输入两个数,求和,十进制数转换为二级制八进制十六进制的两个程序的代码

    目录 前言 一.输入两个数,求和 1.实现的功能 2.代码程序 3.运行截图 二.十进制数转换为二级制八进制十六进制 1.实现的功能 2.代码程序 3.运行截图 前言 1.因多重原因,本博文由两个程序 ...

  8. java开关用法_如何在Java中使用带开关盒的枚举?

    Java中的枚举(枚举)是一种存储一组常量值的数据类型.您可以使用枚举来存储固定值,例如一周中的天,一年中的月等.enum Days { SUNDAY, MONDAY, TUESDAY, WEDNES ...

  9. Vijos 1197 - 费解的开关

    描述 你玩过"拉灯"游戏吗?25盏灯排成一个5x5的方形.每一个灯都有一个开关,游戏者可以改变它的状态.每一步,游戏者可以改变某一个灯的状态.游戏者改变一个灯的状态会产生连锁反应: ...

最新文章

  1. EBS fnd_global.apps_initialize
  2. 深度linux创建微信图标,Deepin Linux 下基于deepin-wine的微信图标不见的问题解决
  3. Linux中如何杀掉僵尸进程
  4. Opencv3.0+vs2015
  5. From Hero to Zero
  6. java多字段排序,java8 stream多字段排序的实现
  7. c实现三角形角度大于一个值_初中数学三角形知识点小结
  8. ArcGIS API For Javascript :如何动态生成 token 加载权限分配的地图服务?
  9. 项目内出现广告位引争议,开源如何持续健康运营?
  10. C#使用QQ邮箱发送邮件
  11. 【kmp专题】牛客网子串(进制转化+kmp/string.find())
  12. div+css实现背景透明
  13. 飞天特效腾云驾雾特效手机软件制作特效视频的教程
  14. cocos creator播放声音控制台显示Simulator: jsb: ERROR
  15. Lua5.3 与C交互学习(一)
  16. 《工业控制系统信息安全防护指南》产品措施匹配表
  17. 微信小程序连接第三方接口
  18. 让技术Leader狂点赞的Linux速成手册,到底有多强悍?
  19. Python基础入门:条件语句--阿里云天池
  20. C语言_函数递归举例

热门文章

  1. DL之InceptionV2/V3:InceptionV2 InceptionV3算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  2. Using Preferences(Beginning Android)
  3. 第五个神奇的电梯(2)
  4. 学习笔记57_WCF基础
  5. Java学习手记2——多线程
  6. Disable auto select after clicking magnifier
  7. 2008-08-24
  8. 解决2003不支持FLV的方法
  9. 对于DataSet中的问题真是郁闷啊
  10. 解决烧录问题:Jlink的三线制SWD方式连接STM32芯片无法识别的解决方案