ACAG 0x02-4 费解的开关

对于这道题,我们不难发现如下性质:

  1. 每个位置之多被点击一次;
  2. 点击的先后顺序不影响结果;
  3. 若确定了第$1$行,则接下来可能的点击方案就只有$1$种。具体原因是:当第$i$行某一位为$0$时,此时前$i$行均已确定,所以只能点击第$i+1$行该位置上的数,才能使第$i$行的这一位变成$1$。

    于是,我们只需要考虑第一行的点击方法。不难枚举得,共$32$种。我们可以用$0$~$31$的二进制表示点击方法。

    然后,对于每种方法,我们可以递推出接下来$2$~$5$行的点击方法,最后进行检查。如果矩阵全变为$1$,则说明该方案合法。并更新答案。

    此外,在检查的时候,只需要检查最后$1$行即可。
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f using namespace std; int n,ans,tmp;
int a[7][7],b[7][7];
char s[7]; void Read() {
for(int i=1;i<=5;i++) {
cin>>(s+1);
for(int j=1;j<=5;j++) {
a[i][j]=s[j]-'0';
}
}
ans=INF;
return;
} void Init() {
for(int i=1;i<=5;i++) {
for(int j=1;j<=5;j++) {
b[i][j]=a[i][j];
}
}
tmp=0;
return;
} void Change(int x,int y) {
b[x][y]==1?b[x][y]=0:b[x][y]=1;
b[x][y-1]==1?b[x][y-1]=0:b[x][y-1]=1;
b[x][y+1]==1?b[x][y+1]=0:b[x][y+1]=1;
b[x-1][y]==1?b[x-1][y]=0:b[x-1][y]=1;
b[x+1][y]==1?b[x+1][y]=0:b[x+1][y]=1;
tmp++;
return;
} bool Check() {
if(tmp>6) {
return false;
}
for(int i=1;i<=5;i++) {
if(b[5][i]==0) {
return false;
}
}
return true;
} void DFS(int x) {
if(x==6) {
if(Check()) {
ans=min(ans,tmp);
}
return;
}
for(int i=1;i<=5;i++) {
if(b[x-1][i]==0) {
Change(x,i);
}
}
DFS(x+1);
} void Solve() {
for(int i=0;i<=31;i++) {
Init();
for(int j=0;j<=4;j++) {
int x=(i>>j)&1;
if(x) {
Change(1,j+1);
}
}
DFS(2);
}
printf("%d\n",ans==INF?-1:ans);
return;
} int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) {
Read();
Solve();
}
return 0;
}

ACAG 0x02-4 费解的开关的更多相关文章

  1. AcWing 95 费解的开关

    目录 前言 题目链接 思路 代码 前言 博客咕咕咕了好久了,是时候写一下了 题目链接 AcWing 95 费解的开关 思路 首先可以看出 1.每一个位置顶多只会操作一次.因为如果操作两次的话,相当于不 ...

  2. TyvjP1266 费解的开关

    P1266 费解的开关 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述     你玩过“拉灯”游戏吗?25盏灯排成一个5x5的方形.每一个灯都有一个开关,游戏 ...

  3. TVYJ1266:费解的开关

    我对状态空间的理解:https://www.cnblogs.com/AKMer/p/9622590.html 题目传送门:http://www.joyoi.cn/problem/tyvj-1266 这 ...

  4. ACWING 95 费解的开关 解题记录

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

  5. 【ACwing 95】费解的开关——枚举 + 搜索

    (题面来自ACwing) 你玩过"拉灯"游戏吗?25盏灯排成一个5x5的方形.每一个灯都有一个开关,游戏者可以改变它的状态.每一步,游戏者可以改变某一个灯的状态.游戏者改变一个灯的 ...

  6. ACWing95. 费解的开关

    题解 这道题目有三个状态条件值得考虑: 每一个开关被按0次或者1次才有意义,如果超过1次,那么等同于按0或1次. 最终的结果与按的顺序无关 因为2,所以可以人为地规定比较合理的顺序. 现在以每一行为顺 ...

  7. TYVJ1266 费解的开关

    恩,这题...... 看看题面想到了啥?炮兵阵地! 再仔细一思考:炮兵阵地是求放置最多,而这个显然可以递推得出. 由于每个格子至多点一次,那么我们发现: 在第一行点击状态确定的情况下,后面每个格子的点 ...

  8. CH0201 费解的开关 枚举

    正解:枚举 解题报告: 入门傻逼题,思维难度不高代码量极小,非常适合上手 然后傻逼的我第二次看这道题的时候依然没想到解法:D 没有办法,就想着写个笔记好歹记录一下以后多复习几次就记着了趴qwq 就是, ...

  9. tyvj 1266 费解的开关

    传送门 解题思路 枚举第一行的状态,判断后面可不可行. 代码 #include<iostream> #include<cstdio> #include<cstring&g ...

随机推荐

  1. [转]How to Install Oracle Java 11 in Ubuntu 18.04/18.10

    链接地址:http://ubuntuhandbook.org/index.php/2018/11/how-to-install-oracle-java-11-in-ubuntu-18-04-18-10 ...

  2. Java开发笔记(一百四十二)JavaFX的对话框

    JavaFX的对话框主要分为提示对话框和文件对话框两类,其中提示对话框又分作消息对话框.警告对话框.错误对话框.确认对话框四种.这四种对话框都使用Alert控件表达,并通过对话框类型加以区分,例如Al ...

  3. 基于DigitalOcean+LAMP+WordPress搭建个人网站

    1. 注册DigitalOcean并新建主机 为了搭建个人网站首先需要一个可以在公网范围访问的主机,可以选用国内如阿里云.国外如DigitalOcean的各种云主机提供商,这里选用DigitalOce ...

  4. Python的正则表达式和爬虫

    1.常用元字符 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 2.常用限 ...

  5. python学习-30 总结

    小结 1.map函数: 处理序列中的每个元素,得到结果是一个‘列表’,该‘列表’元素个数及位置与原来一样 2.filter:遍历序列中的每个元素,判断每个元素得到的布尔值,如果是True则留下来,例如 ...

  6. me.chanjar.weixin.common.error.WxErrorException: {"errcode":40013,"errmsg":"invalid appid hint: [xxxxxxxxxx]"}

    错误解决思路: 1.看看appid和appsecret的配置信息是否正确 2.查看前后端通信的http或者https协议是否正确( http://xxxxxxx 写成https://xxxxxxx)

  7. 5. Spark Streaming高级解析

    5.1 DStreamGraph对象分析 在Spark Streaming中,DStreamGraph是一个非常重要的组件,主要用来: 1. 通过成员inputStreams持有Spark Strea ...

  8. LOJ2401 JOISC2017 Dragon2 计算几何、线段树

    传送门 先考虑每一个攻击方的龙和被攻击方的龙可以与多少个被攻击方/攻击方的龙匹配. 对于攻击方的龙\(A\)和被攻击方的龙\(B\),在道路为线段\((C,D)\)的情况下,能够与下图位置的所有对应属 ...

  9. 通过重新上传修改后的docker镜像来在kubeapps上实现k8s上部署的nginx版本更新,回退等

    docker操作:制作自定义镜像 # docker下载官方nginx镜像 docker pull nginx # 基于该镜像运行一个容器 docker run -it -d --name nginx_ ...

  10. Ambari深入学习(I)-系统架构

    Ambari是hadoop分布式集群配置管理工具,是由hortonworks主导的开源项目.它已经成为apache基金会的孵化器项目,已经成为hadoop运维系统中的得力助手,引起了业界和学术界的关注 ...