正题

题目链接:https://vijos.org/p/1197


大意

有5*5个开关,每次选择一个地方时它和它上下左右的开关都会取反,求将所有开关都变成1的最少次数。


解题思路

首先我们知道一个位置一定不会点击超过一次。这样我们就可以得出一条性质,当第一行都已经决定是否点击过后,第一行就只能由第二行点击,那么这时第二行只能点击第一行还没打开的灯的下面,这样以此类推的话第二条性质就出来了。
如果第一行决定是否点击的方案了,如果有解的话,那么只有一种点击方式。
这样的话我们就可以枚举第一行每格是否点击,然后我们就可以推出后面几行,如果有解的话那么就取最小解。


代码

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int n=5;
int s[7],bs[7],ans,mins,t;
char a;
int main()
{scanf("%d",&t);for (int ti=1;ti<=t;ti++){for(int i=1;i<=n;i++){bs[i]=0;for(int j=1;j<=n;j++){cin>>a;a-='0';bs[i]=(bs[i]<<1)+a;//读入}}mins=2147483647;for (int i=0;i<=31;i++)//枚举{ans=0;for (int j=1;j<=n;j++)s[j]=bs[j];for (int j=0;j<=n;j++)if (i&(1<<j))//是否点击{if (j!=n-1)s[1]^=1<<(j+1);s[1]^=1<<j;if (j!=0)s[1]^=1<<(j-1);s[2]^=1<<j;ans++;}//改变和统计for (int j=2;j<=n;j++)for (int k=0;k<n;k++)if (!((s[j-1]>>k)&1))//上一行是否还有{if (k!=n-1)s[j]^=1<<(k+1);s[j]^=1<<k;if (k!=0)s[j]^=1<<(k-1);s[j+1]^=1<<k;ans++;}//改变和统计if (s[n]==31)//有解mins=min(mins,ans);//取最小答案}if (mins>6) printf("-1\n");else printf("%d\n",mins);}
}

vijos1197-费解的开关【递推,枚举,位运算】相关推荐

  1. C++费解的开关(递推,位运算)

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

  2. 蓝桥备赛第一周2021.1.11 递归 枚举 位运算

    文章目录 递归实现指数型枚举 递归指数型枚举 方法1:肯定是2^n行,所以直接就是上一个动态m从0到n加一堆空行 方法2:以最新的值为n为结束,遇到为0的不输出,用完要恢复为0 递归实现排列型枚举 非 ...

  3. c语言 枚举,位运算

    c语言 枚举,位运算 枚举 枚举类型的定义和枚举变量的说明 一.枚举的定义枚举类型定义的一般形式为 二.枚举变量的说明 枚举类型变量的赋值和使用 位运算 位域 一.位域的定义和位域变量的说明 二.位域 ...

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

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

  5. HYSBZ(BZOJ) 4300 绝世好题(位运算,递推)

    HYSBZ(BZOJ) 4300 绝世好题(位运算,递推) Description 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<= ...

  6. 第一章:递推与递归 【完结】

    目前,这一章都已经熟练掌握了. 目录 92. 递归实现指数型枚举 [板子题] 94. 递归实现排列型枚举 [板子题] 93. 递归实现组合型枚举[板子题] 717. 简单斐波那契 [简单 / 递推] ...

  7. BZOJ 3329: Xorequ(数位dp+递推)

    传送门 解题思路 可以把原式移项得\(x\)^\(2x\)=\(3x\),而\(x+2x=3x\),说明\(x\)二进制下不能有两个连续的\(1\).那么第一问就是一个简单的数位\(dp\),第二问考 ...

  8. ( 其他算法与技巧 )【 线性递推 Berlekamp-Massey算法 】

    ( 其他算法与技巧 )[ 线性递推  Berlekamp-Massey算法 ] 原理请看:https://www.cnblogs.com/p-b-p-b/p/10844127.html 和 https ...

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

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

最新文章

  1. 不同机器互相调用WebService或者HTTP一定要telnet 测试
  2. 1001 A+B Format
  3. 两成开发者月薪超 1.7 万、算法工程师最紧缺! | 中国开发者年度报告
  4. 近期必读的6篇NeurIPS 2019零样本学习论文
  5. 基于Python的自动特征工程——教你如何自动创建机器学习特征
  6. 基于cookie的SSO单点登录系统
  7. Android MagicIndicator系列之一 —— 使用MagicIndicator打造千变万化的ViewPager指示器...
  8. myeclipse导出doc
  9. csdn颜色字体的改变
  10. (转)你的团队需要一个领袖,而不是一个主管
  11. Window CE 驱动开发流程(Windows CE.5.0系统、pxa270平台)
  12. 新建iOS工程如何给所有类名添加前缀
  13. 备考2个月如何一次性通过信息系统项目管理师
  14. matlab 病态方程组,超定方程组与欠定方程组(病态方程组)
  15. JavaMail中的553 Mail from must equal authorized user
  16. 关于Python列表解析式以及初始化指定size列表
  17. 《大数据之路:阿里巴巴大数据实践》第一篇 数据技术篇-读书笔记
  18. html遮罩点击,点击按钮实现遮罩效果
  19. Computer Vision_3D Reconstruction_Point Cloud(计算机视觉三维重建点云点云配准)
  20. SQLServer的sql_variant数据类型

热门文章

  1. n以内的素数c语言,关于求N以内素数的一点小问题(N小于一亿)
  2. antd request 通过jsessionid传参数_Umi-request源码阅读
  3. 128位计算机 ps2,64位就是最强电脑?难道就没有128位的电脑吗
  4. 动态箭头gif图标_别以为只有专业人士才能做出酷炫的#动态跑分图#
  5. mysql函数保留小数_MySql自定义函数-关于保留小数位的特殊需求
  6. mysql100链接同时处理_php 连接MYSQL 两个同时连接为什么只有一个连接成功,必须删掉一个,另外一个才查询生效出结果,下附代码...
  7. leetcode93. 复原 IP 地址
  8. leetcode94. 二叉树的中序遍历(左中右)
  9. 7-2 银行家算法--申请资源 (30 分)
  10. 高等数学上-赵立军-北京大学出版社-题解-练习2.7