博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 P2622 关灯问题II 状态压缩+bfs
阅读量:3903 次
发布时间:2019-05-23

本文共 804 字,大约阅读时间需要 2 分钟。

题目描述

现有n盏灯,以及m个按钮。每个按钮可以同时控制这n盏灯——按下了第i个按钮,对于所有的灯都有一个效果。按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j]为1,那么当这盏灯开了的时候,把它关上,否则不管;如果为-1的话,如果这盏灯是关的,那么把它打开,否则也不管;如果是0,无论这灯是否开,都不管。

现在这些灯都是开的,给出所有开关对所有灯的控制效果,求问最少要按几下按钮才能全部关掉。

输入输出格式

输入格式:

 

前两行两个数,n m

接下来m行,每行n个数,a[i][j]表示第i个开关对第j个灯的效果。

 

输出格式:

 

一个整数,表示最少按按钮次数。如果没有任何办法使其全部关闭,输出-1

 

输入输出样例

输入样例#1: 复制

321 0 1-1 1 0

输出样例#1: 复制

2

说明

对于20%数据,输出无解可以得分。

对于20%数据,n<=5

对于20%数据,m<=20

上面的数据点可能会重叠。

对于100%数据 n<=10,m<=100

 思路:

此题可以有bfs,但是bfs得存每个节点灯的状态,如果使用数组则花费的空间和时间不是很划算,因为最多只有10盏灯,所以可以用个十进制数来表示状态,通过移位操作来进行操作。

代码如下:

#include 
#include
#include
#include
#include
using namespace std;int n,m;const int maxn=(1<<10)+5;int vis[maxn];struct node{ int dp; int step;};int a[105][15];int bfs (){ queue
q; node now,next; int t=1<

 

转载地址:http://lgaen.baihongyu.com/

你可能感兴趣的文章
常用计算机端口解释
查看>>
转载)保护眼睛,把电脑窗口背景设置成绿颜色
查看>>
FireFox 的强大Web开发插件
查看>>
ANT的基础介绍
查看>>
MIME相关
查看>>
WAP1.0与WAP2.0页面的DTD
查看>>
如何学好C++语言
查看>>
包的设计原则
查看>>
回顾时光 详解HTML的发展史
查看>>
用移动硬盘安装win7
查看>>
MinGW与Cygwin
查看>>
C/C++/VC++的好网站
查看>>
用WEB标准进行开发
查看>>
[译]关于Android图形系统的一些事实真相
查看>>
J2ME下的Zlib/Gzip/Zip压缩相关
查看>>
Android 模拟器中AVD路径的修改(WIN7)
查看>>
Cygwin 的安装配置
查看>>
Cygwin基本命令的使用方法
查看>>
Java本地接口(JNI)编程指南和规范(第二章)
查看>>
工欲善其事,必先利其器之—使用Atom来写markdown
查看>>