vijos1197-费解的开关【递推,枚举,位运算】
正题
题目链接: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-费解的开关【递推,枚举,位运算】相关推荐
- C++费解的开关(递推,位运算)
你玩过"拉灯"游戏吗?25盏灯排成一个5x5的方形.每一个灯都有一个开关,游戏者可以改变它的状态.每一步,游戏者可以改变某一个灯的状态.游戏者改变一个灯的状态会产生连锁反应:和这个 ...
- 蓝桥备赛第一周2021.1.11 递归 枚举 位运算
文章目录 递归实现指数型枚举 递归指数型枚举 方法1:肯定是2^n行,所以直接就是上一个动态m从0到n加一堆空行 方法2:以最新的值为n为结束,遇到为0的不输出,用完要恢复为0 递归实现排列型枚举 非 ...
- c语言 枚举,位运算
c语言 枚举,位运算 枚举 枚举类型的定义和枚举变量的说明 一.枚举的定义枚举类型定义的一般形式为 二.枚举变量的说明 枚举类型变量的赋值和使用 位运算 位域 一.位域的定义和位域变量的说明 二.位域 ...
- AcWing 95. 费解的开关(指数型枚举)
95. 费解的开关 题意: 给定一个5x5的方格,共25盏灯 每盏灯有开和关两种状态 每次操作一盏灯时,以该灯为中心的十字形状范围的灯都会改变状态 找到用最少的操作步数使所有的灯都亮着,当步数超过6时 ...
- HYSBZ(BZOJ) 4300 绝世好题(位运算,递推)
HYSBZ(BZOJ) 4300 绝世好题(位运算,递推) Description 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<= ...
- 第一章:递推与递归 【完结】
目前,这一章都已经熟练掌握了. 目录 92. 递归实现指数型枚举 [板子题] 94. 递归实现排列型枚举 [板子题] 93. 递归实现组合型枚举[板子题] 717. 简单斐波那契 [简单 / 递推] ...
- BZOJ 3329: Xorequ(数位dp+递推)
传送门 解题思路 可以把原式移项得\(x\)^\(2x\)=\(3x\),而\(x+2x=3x\),说明\(x\)二进制下不能有两个连续的\(1\).那么第一问就是一个简单的数位\(dp\),第二问考 ...
- ( 其他算法与技巧 )【 线性递推 Berlekamp-Massey算法 】
( 其他算法与技巧 )[ 线性递推 Berlekamp-Massey算法 ] 原理请看:https://www.cnblogs.com/p-b-p-b/p/10844127.html 和 https ...
- 《算法竞赛进阶指南》打卡-基本算法-AcWing 95. 费解的开关:位运算、枚举、递推
文章目录 题目解答 题目来源 题目解答 分析: 枚举第一行,指的是第一行哪些位置要切换状态!!!.第一行总共有5个数,组合数是32,即第一行哪些位置要切换总共有32种情况.这就是我们的枚举空间.比如, ...
最新文章
- 不同机器互相调用WebService或者HTTP一定要telnet 测试
- 1001 A+B Format
- 两成开发者月薪超 1.7 万、算法工程师最紧缺! | 中国开发者年度报告
- 近期必读的6篇NeurIPS 2019零样本学习论文
- 基于Python的自动特征工程——教你如何自动创建机器学习特征
- 基于cookie的SSO单点登录系统
- Android MagicIndicator系列之一 —— 使用MagicIndicator打造千变万化的ViewPager指示器...
- myeclipse导出doc
- csdn颜色字体的改变
- (转)你的团队需要一个领袖,而不是一个主管
- Window CE 驱动开发流程(Windows CE.5.0系统、pxa270平台)
- 新建iOS工程如何给所有类名添加前缀
- 备考2个月如何一次性通过信息系统项目管理师
- matlab 病态方程组,超定方程组与欠定方程组(病态方程组)
- JavaMail中的553 Mail from must equal authorized user
- 关于Python列表解析式以及初始化指定size列表
- 《大数据之路:阿里巴巴大数据实践》第一篇 数据技术篇-读书笔记
- html遮罩点击,点击按钮实现遮罩效果
- Computer Vision_3D Reconstruction_Point Cloud(计算机视觉三维重建点云点云配准)
- SQLServer的sql_variant数据类型
热门文章
- n以内的素数c语言,关于求N以内素数的一点小问题(N小于一亿)
- antd request 通过jsessionid传参数_Umi-request源码阅读
- 128位计算机 ps2,64位就是最强电脑?难道就没有128位的电脑吗
- 动态箭头gif图标_别以为只有专业人士才能做出酷炫的#动态跑分图#
- mysql函数保留小数_MySql自定义函数-关于保留小数位的特殊需求
- mysql100链接同时处理_php 连接MYSQL 两个同时连接为什么只有一个连接成功,必须删掉一个,另外一个才查询生效出结果,下附代码...
- leetcode93. 复原 IP 地址
- leetcode94. 二叉树的中序遍历(左中右)
- 7-2 银行家算法--申请资源 (30 分)
- 高等数学上-赵立军-北京大学出版社-题解-练习2.7