洛谷 P2040 打开所有的灯 题解
这个题写其他题解的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 打开所有的灯 题解的更多相关文章
- 洛谷——P2040 打开所有的灯
P2040 打开所有的灯 题目背景 pmshz在玩一个益(ruo)智(zhi)的小游戏,目的是打开九盏灯所有的灯,这样的游戏难倒了pmshz... 题目描述 这个灯很奇(fan)怪(ren),点一下就 ...
- 洛谷 P2040 打开所有的灯
P2040 打开所有的灯 题目背景 pmshz在玩一个益(ruo)智(zhi)的小游戏,目的是打开九盏灯所有的灯,这样的游戏难倒了pmshz... 题目描述 这个灯很奇(fan)怪(ren),点一下就 ...
- 洛谷P1854 花店橱窗布置 分析+题解代码
洛谷P1854 花店橱窗布置 分析+题解代码 蒟蒻的第一道提高+/省选-,纪念一下. 题目描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定 ...
- HAOI2006 (洛谷P2341)受欢迎的牛 题解
HAOI2006 (洛谷P2341)受欢迎的牛 题解 题目描述 友情链接原题 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之 ...
- 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)
洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...
- 洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速$dp\&Floyd$)
洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速\(dp\&Floyd\)) 标签:题解 阅读体验:https://zybuluo.com/Junl ...
- BZOJ4946 & 洛谷3826 & UOJ318:[NOI2017]蔬菜——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4946 https://www.luogu.org/problemnew/show/P3826 ht ...
- 洛谷1578:[WC2002]奶牛浴场——题解
https://www.luogu.org/problemnew/show/P1578#sub 由于John建造了牛场围栏,激起了奶牛的愤怒,奶牛的产奶量急剧减少.为了讨好奶牛,John决定在牛场中建 ...
- 洛谷P2460 [SDOI2007]科比的比赛(题解)(贪心+搜索)
科比的比赛(题解)(贪心+搜索) 标签:算法--贪心 阅读体验:https://zybuluo.com/Junlier/note/1301158 贪心+搜索 洛谷题目:P2460 [SDOI2007] ...
随机推荐
- eclipse的debug模式的F5,F6按键失灵
在使用eclipse Mars.1 Release (4.5.1)开发过程中,发现debug模式下的快捷键无法使用,全部失效了.秉持坚决自己解决绝不求人的态度我艰苦的在度娘上寻求解决办法,有的说是快捷 ...
- 运行带有Activiti modeler时,出现这样的报错: java.rmi.AccessException: Cannot modify this registry
最近在做整合Activiti Modeler工作流在线设计器的工作,运行IDEA时,出现了这样一个错误信息: 原因及解决办法: Activiti默认打开了jmx功能,默认端口为1099,idea中 ...
- MVC伪静态路由简单搭配
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute ...
- 当前标识(IIS APPPOOL\DefaultAppPool)没有对“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files”的写访问权限
找到或增加这个目录,给他增加权限.
- CSS3 完善盒模型
CSS3 改善了传统盒模型结构,增强了盒子构成要素的功能,扩展了盒模型显示的方式. 改善结构:为盒子新增轮廓区: 增强功能:内容区增强 CSS 自动添加内容功能,增强内容移除.换行处理:允许多重定义背 ...
- Solr基础理论【倒排索引,模糊查询】
一.简介 现有的许多不同类型 的技术系统,如关系型数据库.键值存储.操作磁盘文件的map-reduce[映射-规约]引擎.图数据库等,都是为了帮助用户解决颇具挑战性的数据存储与检索问题而设计的.而搜索 ...
- mybatis update 返回值
mybatis sql: <update id="test" parameterType="map"> update test_0731 set n ...
- MySQL--performance schema学习
启用performance schema 在MySQL 5.6.6版本后,performance schema被默认打开 通常MySQL的二进制版本都默认支持PS, 如果使用编译源码安装,在cmake ...
- Mysql 单表查询-排序-分页-group by初识
Mysql 单表查询-排序-分页-group by初识 对于select 来说, 分组聚合(((group by; aggregation), 排序 (order by** ), 分页查询 (limi ...
- win2003下安装python3.4 + pyspider
昨天尝试了在win2003下安装python2.7.这个是文章地址:https://www.cnblogs.com/alpiny/p/11706606.html 但是程序跑了一晚上,发现有一点问题,是 ...