这个题写其他题解的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. 使用Dbvisualizer 连接 Elasticsearch

    Dbvisualizer 安装 从网上下载该软件,并破解激活 下载地址:http://www.ddooo.com/softdown/142713.htm 1.下载解压,得到dbvisualizer p ...

  2. Python开发【第十二篇】python作用域和global nonlocal

    python的作用域 作用域也叫名字空间,是访问变量时查找变量名的范围空间 python中的四个作用域 LEGB 作用域 英文解释 英文缩写 局部作用域 Local(function) L 外部嵌套函 ...

  3. @interface __ annotation 子类可以继承到父类上的注解吗--有结论了

    博客分类: Java/J2se   作者:赵磊 博客:http://elf8848.iteye.com 不了解注解基础知识的请先看<JDK 5 Annotation\注解\注释\自定义注解> ...

  4. C#简单构架之EF进行读写分离+多数据库Mysql/SqlServer

    http://www.php361.com/index.php?c=index&a=view&id=3857 不建议用,太重的框架EF,仅仅参考一下别人的思路就好. [导读]最近因为项 ...

  5. c#中关于@的作用

    参考链接:https://www.cnblogs.com/linkbiz/p/6380814.html

  6. C# 使用SuperSocket

    一.需求场景 (1)使用SuperSocket进行网络通信 二.所需软件 (1)SocketTool 三.实现步骤   (1)使用Nuget管理器安装SuperSocket.Engine 该插件已经包 ...

  7. 浏览器解析js

    网页加载js步骤 1.浏览器一边下载html网页,一边开始解析(不等下载完就解析)2.遇到<script>标签,暂停解析,网页渲染的控制权交给javascript引擎3.如果<scr ...

  8. Kubemetes

    将应用docker化,配合ETCD.kubernetes等工具在容器的层面上实现高可用和负载均衡 容器化部署 容器化部署应用具有灵活.高效的使用资源,容器可以包含其所需的全部文件,如同在虚拟机上部署应 ...

  9. jquery如何监听浏览器窗口大小并根据不同的大小输出不同的值

    $(window).bind("load resize",function(){ document.documentElement.clientWidth >= 600 ? ...

  10. JS案例 - 分页

    1.html文件 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...