洛谷p2040打开所有的灯

一蓑烟雨任生平 一蓑烟雨任生平     2022-10-07     163

关键词:

题目背景

pmshz在玩一个益(ruo)智(zhi)的小游戏,目的是打开九盏灯所有的灯,这样的游戏难倒了pmshz。。。

题目描述

这个灯很奇(fan)怪(ren),点一下就会将这个灯和其周围四盏灯的开关状态全部改变。现在你的任务就是就是告诉pmshz要全部打开这些灯。

例如 0 1 1

1 0 0

1 0 1

点一下最中间的灯【2,2】就变成了

0 0 1

0 1 1

1 1 1

再点一下左上角的灯【1,1】就变成了

1 1 1

1 1 1

1 1 1

达成目标。最少需要2步。

输出2即可。

输入输出格式

输入格式:

 

九个数字,3*3的格式输入,每两个数字中间只有一个空格,表示灯初始的开关状态。(0表示关,1表示开)

 

输出格式:

 

1个整数,表示最少打开所有灯所需要的步数。

 

输入输出样例

输入样例#1: 复制
0  1  1
1  0  0
1  0  1
输出样例#1: 复制
2

说明

这个题水不水,就看你怎么考虑了。。。。

思路:看数据范围,n*n==9,所以如果搜索的话,时间复杂度为2^9可以跑过去。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int ans=0x7f7f7f7f;
bool map[10][10],vis[10][10];
bool judge(){
    int bns=0;
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
            if(map[i][j])    bns++;
    if(bns==9)    return true;
    else return false;
}
void dfs(int sum){
    if(judge()){
        ans=min(ans,sum);
        return ;
    }
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
            if(!vis[i][j]){
                vis[i][j]=1;map[i][j]=!map[i][j];
                map[i-1][j]=!map[i-1][j];map[i][j-1]=!map[i][j-1];
                map[i+1][j]=!map[i+1][j];map[i][j+1]=!map[i][j+1];
                dfs(sum+1);map[i][j]=!map[i][j];
                map[i-1][j]=!map[i-1][j];map[i][j-1]=!map[i][j-1];
                map[i+1][j]=!map[i+1][j];map[i][j+1]=!map[i][j+1];vis[i][j]=0;
            }
}
int main(){
    for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
            scanf("%d",&map[i][j]);
    dfs(0);
    cout<<ans;
}

但是我们要谈就更优异的算法,我们知道,改变一盏偶数次,相当于没有改变,而改变基数词,相当于改变一次。所以这个题目可以转成二进制。

代码见这里

p2040打开所有的灯(代码片段)

...示关,1表示开) 输出格式: 1个整数,表示最少打开所有灯所需要的步数。 输入输出样例输入样例#1: 复制011100101输出样例#1: 复制21#include<bits/stdc++.h>2usingnamespacestd;3inta[3][3];4intb[3][3];5intans=999999;6intmain()... 查看详情

洛谷p1468[usaco2.2]派对灯partylamps

题目描述在IOI98的节日宴会上,我们有N(10<=N<=100)盏彩色灯,他们分别从1到N被标上号码。这些灯都连接到四个按钮:按钮1:当按下此按钮,将改变所有的灯:本来亮着的灯就熄灭,本来是关着的灯被点亮。按钮2:当按下此... 查看详情

luogu2040|打开所有的灯(广搜+状压)(代码片段)

题目背景pmshz在玩一个益(ruo)智(zhi)的小游戏,目的是打开九盏灯所有的灯,这样的游戏难倒了pmshz。。。题目描述这个灯很奇(fan)怪(ren),点一下就会将这个灯和其周围四盏灯的开关状态全部改变。现在你的任务就是就是告诉pmshz... 查看详情

洛谷u6931灯光

U6931灯光题目背景明天就是校园活动了,小明作为场地的负责人,将一切都布置好了。但是在活动的前几天,校园里的灯却都坏掉了,无奈之下,只好再去买一批灯。但是很遗憾的是,厂家看马上要过年了,就没有在进货了,现... 查看详情

开灯问题-----00004

描述有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),第3 个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k... 查看详情

开灯和蛇形

...。开灯问题,有n盏灯,编号为1-n,第一个人把所有的灯都打开,第二个人按下所有编号为2的倍数的开关(这些灯将被关掉),第三个人按下所有编号为3倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),以此类推,一... 查看详情

开灯问题

...nbsp;开灯问题,有n盏灯,编号为1~n。第一个人把所有灯都打开,第二个人按下所有编号为2的倍数的开关(这些灯将被关掉),第三个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),以此类推。... 查看详情

179竞赛

...都是关着的。在k 时刻(k的取值范围是0到n-1),我们打开light[k]这个灯。灯的颜色要想变成蓝色就必须同时满足下面两个条件:灯处于打开状态。排在它之前(左侧)的所有灯也都处于打开状态。请返回能够让所有开着的灯... 查看详情

开灯问题(代码片段)

有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后... 查看详情

我无法让相机打开它的灯

】我无法让相机打开它的灯【英文标题】:I\'mnotabletogetthecameratoturnonitslight【发布时间】:2014-02-0217:49:27【问题描述】:我有一个简单的类应用程序,它应该打开相机的灯,但这是我的错误日志;02-0212:40:47.939:W/dalvikvm(24314):threadi... 查看详情

开灯问题

...65535KB难度:1描述有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共... 查看详情

开灯问题

有n盏灯,编号为1~n,第一个人把所有灯打开,第二个人按下所有编号为2的倍数开关(这些灯将被关掉),第三个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),一次类推,一共有k个人,问最后哪些... 查看详情

nyoj77-开灯问题(倍数遍历)(代码片段)

...:24难度:1题目描述:有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共... 查看详情

开灯问题--------《算法竞赛入门指导》p83

开灯问题。有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个... 查看详情

luogup1468派对灯partylamps

...些灯都连接到四个按钮:按钮1:当按下此按钮,将改变所有的灯:本来亮着的灯就熄灭,本来是关着的灯被点亮。按钮2:当按下此按钮,将改变所有奇数号的灯。按钮3:当按下此按钮,将改变所有偶数号的灯。按钮4:当按下... 查看详情

使用 API 的飞利浦 Hue 应用程序能否对打开的灯做出反应?

】使用API的飞利浦Hue应用程序能否对打开的灯做出反应?【英文标题】:CanaPhilipsHueappusingtheAPIreacttoalightbeingturnedon?【发布时间】:2016-02-1608:29:12【问题描述】:我正在尝试完成一些简单的事情。当有人打开色调灯时,如果是在... 查看详情

usaco2.2partylamps高能等效+规律枚举

...luogu.org/problem/show?pid=1468#sub按钮1:当按下此按钮,将改变所有的灯:本来亮着的灯就熄灭,本来是关着的灯被点亮。按钮2:当按下此按钮,将改变所有奇数号的灯。按钮3:当按下此按钮,将改变所有偶数号的灯。按钮4:当按下... 查看详情

关路灯,洛谷dp

 题目传送门https://www.luogu.org/problem/show?pid=1220我们假设dpij0为目前最优值是在i位置,dpij1为目前最优值是在j位置则i到j表示已经关掉的灯的区间,因为我们要求最小的损耗,所以必然是从当前区间走向区间两端再利用前缀和来... 查看详情