这个题写其他题解的dalao们已经解释了

一个灯最多开一次(如果实在不知道为什么看评论区)

这个题一共就9个灯嘛,对吧

递归好想不好写(对于我这种蒟蒻)

所以我写了一个所有题解中最暴力的

直接枚举9个灯的开关状态就可以了

我们把原先的数组开半天在初始化不如弄一个已经全开了的数组开半天看看能不能返回原先的状态就好了更方便一点

//打开所有的灯 九层循环法
#include<bits/stdc++.h> using namespace std; inline int read() {//快读
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9') {
if(ch=='-')w=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s*w;
}
inline void write(int x) //快写{
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
} int b[11][11],c[11][11],a[11][11],tot,zx = 999;
int xx[] = {0,1,-1,0,0},yy[] = {0,0,0,1,-1},d[10]; int pd(int x) {//判断在哪一行
if(x <= 3)
return 1;
if(x >= 7)
return 3;
return 2;
} void kd(int x,int y) {//开它周围的灯
for(int i = 0; i <= 4; ++i) {
int x2 = x + xx[i] , y2 = y + yy[i];
c[x2][y2] == 1 ? c[x2][y2] = 0 : c[x2][y2] = 1;
}
} bool jc() {//判断是否全打开了
for(int i = 1; i <= 3; ++i)
for(int j = 1; j <= 3; ++j)
if(a[i][j] != c[i][j])
return 0;
return 1;
} int main(int argc, char const *argv[]) {
for(int i = 1; i <= 3; ++i)//读入并初始化c
for(int j = 1; j <= 3; ++j) {
a[i][j] = read();
c[i][j] = 1;
}
int he = 0;
for(d[1] = 0; d[1] <= 1; ++d[1])
for(d[2] = 0; d[2] <= 1; ++d[2])
for(d[3] = 0; d[3] <= 1; ++d[3])
for(d[4] = 0; d[4] <= 1; ++d[4])
for(d[5] = 0; d[5] <= 1; ++d[5])
for(d[6] = 0; d[6] <= 1; ++d[6])
for(d[6] = 0; d[6] <= 1; ++d[6])
for(d[7] = 0; d[7] <= 1; ++d[7])
for(d[8] = 0; d[8] <= 1; ++d[8])
for(d[9] = 0; d[9] <= 1; ++d[9]) {
for(int i = 1; i <= 9; ++i) {
if(d[i] == 1) {//如果开着
kd(pd(i),i % 3 == 0 ? 3 : i % 3);开灯
he ++;//计数器
if(he > zx)//如果不是正解直接退出
break;
}
}
if(jc() && he < zx) {//如果全都开了并且比最小值小
zx = he;
}
he = 0;
for(int i = 1; i <= 3; ++i)//清空数组
for(int j = 1; j <= 3; ++j)
c[i][j] = 1;
}
write(zx);
cout<<endl;
return 0;
}

友情赠送(递归版本)

//打开所有的灯 递归法
#include<bits/stdc++.h> using namespace std; inline int read() {
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9') {
if(ch=='-')w=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s*w;
}
inline void write(int x) {
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
} int b[11][11],c[11][11],a[11][11],tot,zx = 999;
int xx[] = {0,1,-1,0,0},yy[] = {0,0,0,1,-1},d[10]; void kd(int x,int y) {
for(int i = 0; i <= 4; ++i) {
int x2 = x + xx[i] , y2 = y + yy[i];
c[x2][y2] == 1 ? c[x2][y2] = 0 : c[x2][y2] = 1;
}
} bool jc() {
for(int i = 1; i <= 3; ++i)
for(int j = 1; j <= 3; ++j)
if(a[i][j] != c[i][j])
return 0;
return 1;
} void dg(int x,int y,int tot) {
if(x == 4) {
if(jc() == 1)
zx = min(zx,tot);
return ;
}
kd(x,y);
y == 3 ? dg(x + 1,1,tot + 1) : dg(x,y + 1,tot + 1);
kd(x,y);
y == 3 ? dg(x + 1,1,tot) : dg(x,y + 1,tot);
} int main(int argc, char const *argv[]) {
for(int i = 1; i <= 3; ++i)
for(int j = 1; j <= 3; ++j) {
a[i][j] = read();
c[i][j] = 1;
}
int he = 0;
dg(1,1,0);
write(zx);
cout<<endl;
return 0;
}

洛谷 P2040 打开所有的灯 题解的更多相关文章

  1. 洛谷——P2040 打开所有的灯

    P2040 打开所有的灯 题目背景 pmshz在玩一个益(ruo)智(zhi)的小游戏,目的是打开九盏灯所有的灯,这样的游戏难倒了pmshz... 题目描述 这个灯很奇(fan)怪(ren),点一下就 ...

  2. 洛谷 P2040 打开所有的灯

    P2040 打开所有的灯 题目背景 pmshz在玩一个益(ruo)智(zhi)的小游戏,目的是打开九盏灯所有的灯,这样的游戏难倒了pmshz... 题目描述 这个灯很奇(fan)怪(ren),点一下就 ...

  3. 洛谷P1854 花店橱窗布置 分析+题解代码

    洛谷P1854 花店橱窗布置 分析+题解代码 蒟蒻的第一道提高+/省选-,纪念一下. 题目描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定 ...

  4. HAOI2006 (洛谷P2341)受欢迎的牛 题解

    HAOI2006 (洛谷P2341)受欢迎的牛 题解 题目描述 友情链接原题 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之 ...

  5. 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)

    洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...

  6. 洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速$dp\&Floyd$)

    洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速\(dp\&Floyd\)) 标签:题解 阅读体验:https://zybuluo.com/Junl ...

  7. BZOJ4946 & 洛谷3826 & UOJ318:[NOI2017]蔬菜——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4946 https://www.luogu.org/problemnew/show/P3826 ht ...

  8. 洛谷1578:[WC2002]奶牛浴场——题解

    https://www.luogu.org/problemnew/show/P1578#sub 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建 ...

  9. 洛谷P2460 [SDOI2007]科比的比赛(题解)(贪心+搜索)

    科比的比赛(题解)(贪心+搜索) 标签:算法--贪心 阅读体验:https://zybuluo.com/Junlier/note/1301158 贪心+搜索 洛谷题目:P2460 [SDOI2007] ...

随机推荐

  1. C#中精确计时的一点收获 Stopwatch

    http://www.cnblogs.com/jintianhu/archive/2010/09/01/1815031.html 参考: https://www.cnblogs.com/kissdod ...

  2. 关于使用mySqlSugar插入数据异常解决方案

    项目的解决方案中引用的有mysqlsugar的数据库操作库,在使用插入数据过程中一些特殊的生僻字或表情符号总会提示: Incorrect string value: '\xF0\x9F...' for ...

  3. asp.net core 系列之Reponse caching 之 Response Caching Middleware(4)

    这篇文章介绍 Response Caching Middleware . Response Caching Middleware in ASP.NET Core 通过在ASP.NET Core应用中 ...

  4. Configuration property name 'xxx' is not valid

    目录 问题 解决 问题 程序出错:Configuration property name ‘xxx’ is not valid, Canonical names should be kebab-cas ...

  5. babel安装及使用

    安装babel npm install babel-cli -g 配置babel babel是用过插件或者预设来编译代码的 新建.babelrc文件 文件中输入一下内容 { "presets ...

  6. Java 8中的Base64编码和解码

    转自:https://juejin.im/post/5c99b2976fb9a070e76376cc Java 8会因为将lambdas,流,新的日期/时间模型和Nashorn JavaScript引 ...

  7. TP5日志打印方法封装

    需求:在开发及测试过程中需要打印日志,并且可以将日志内容打印到指定文件,这样方便查看. 过程: 1. 打开think\Log文件,在该文件中添加一个静态方法,代码如下: /** * @param $m ...

  8. WinForm背景图片及图片位置

    设置背景图片:BackgroundImage属性选择对应的图片就可以了. 背景图片随窗体的变化而变化:BackgroundImageLayout属性值设置为Stretch. 窗体放置图片:Pictur ...

  9. k8s之Deployment 声明式地升级应用(五)

    Deployment 声明式地升级应用 现在你已经知道如何将应用程序组件打包进容器,将他们分组到pod中,并为它们提供临时或者持久存储,将密钥或配置文件注入,并可以使pod之间互相通信.这就是微服务化 ...

  10. linux 常用工具记录及简介

    前言 linuxz虽然各种软件的生态还比较差,但是大势所趋,早晚都是要用的.记录下自己常用的软件,要是那天系统崩了重装也舒服点 编程工具 pycharm专业版(社区版也能用,只是用惯了专业版) * 下 ...