[状压DP]关灯问题II
关
灯
问
题
I
I
关灯问题II
关灯问题II
题目描述
现有n盏灯,以及
m
m
m个按钮。每个按钮可以同时控制这
n
n
n盏灯——按下了第
i
i
i个按钮,对于所有的灯都有一个效果。按下i按钮对于第
j
j
j盏灯,是下面
3
3
3中效果之一:如果
a
[
i
]
[
j
]
a[i][j]
a[i][j]为
1
1
1,那么当这盏灯开了的时候,把它关上,否则不管;如果为
−
1
-1
−1的话,如果这盏灯是关的,那么把它打开,否则也不管;如果是
0
0
0,无论这灯是否开,都不管。
现在这些灯都是开的,给出所有开关对所有灯的控制效果,求问最少要按几下按钮才能全部关掉。
输入
前两行两个数,
n
,
m
n,m
n,m
接下来
m
m
m行,每行
n
n
n个数,
a
[
i
]
[
j
]
a[i][j]
a[i][j]表示第
i
i
i个开关对第
j
j
j个灯的效果。
输出
一个整数,表示最少按按钮次数。如果没有任何办法使其全部关闭,输出
−
1
-1
−1
样例输入
3
2
1 0 1
-1 1 0
样例输出
2
题目解析
先讲一下题目大意,有
n
n
n盏电灯,
m
m
m个开关。
m
m
m个开关对每盏电灯都有一个不同的效果;
例如,有
3
3
3盏电灯,
2
2
2个开关,那么每个开关都有
3
3
3个值,分别是对第
1
1
1个开关,第
2
2
2个开关,第
3
3
3个开关的值。这个值有
3
3
3种类型:如果为
1
1
1,那么当这盏灯开了的时候,把它关上,否则不管;如果为
−
1
-1
−1的话,如果这盏灯是关的,那么把它打开,否则也不管;如果是
0
0
0,无论这灯是否开,都不管。
因为
0
0
0的状态是不会改变电灯的状态的,所以只有
2
2
2种状态是有用的。
---------------------------------------------------------分割线------------------------------------------------------------------
然后,我们用状压DP来做这一题。我们用一个二进制数来表示当前电灯的状态,并转为十进制储存到数组里。而修改状态就使用位运算来处理。
code
#include<cmath>
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
int n, m, et=1;
int dp[1 << 10], a[105][15];
int main ()
{
scanf ("%d%d",&n,&m);
for (int i = 1; i <= m; ++i)
{
for (int j = 1; j <= n; ++j)
{
scanf("%d",&a[i][j]);
}
}
memset(dp,0x3f,sizeof(dp));
dp[(1 << n) - 1]=0;
for (int i = (1 << n) - 1; i >= 0; --i)
{
for (int j=1; j <= m; ++j)
{
et=i;
for (int k=1; k <= n; ++k)
{
if (!a[j][k]) continue;
else if (a[j][k] == 1 && (i & (1 << k - 1)))
et ^= (1 << (k - 1));
else if (a[j][k] == -1 && !(i & (1 << k - 1)))
et ^= (1 << k - 1);
}
dp[et] = min (dp[et], dp[i] + 1);
}
}
printf ("%d", dp[0] == 0x3f3f3f3f ? -1 : dp[0]);
return 0;
}
[状压DP]关灯问题II的更多相关文章
- 状压DP【p2622】 关灯问题II
题目描述--->P2622 关灯问题II 没用的话: 首先第一眼看到题,嗯?n<=10?搜索? 满心欢喜地敲了一通搜索. 交上去,Wa声一片? 全部MLE! 这么坑人神奇? 一想,可能是爆 ...
- 关灯问题II 状压DP
关灯问题II 状压DP \(n\)个灯,\(m\)个按钮,每个按钮都会对每个灯有不同影响,问最少多少次使灯熄完. \(n\le 10,m\le 100\) 状压DP的好题,体现了状压的基本套路与二进制 ...
- 洛谷 P2622 关灯问题II【状压DP】
传送门:https://www.luogu.org/problemnew/show/P2622 题面: 题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯--按下了第i个按钮,对于所有的 ...
- [状压DP]车II
车 I I 车II 车II 题目描述 有一个 n ∗ m n*m n∗m的棋盘 ( n . m ≤ 80 , n ∗ m ≤ 80 ) (n.m≤80,n*m≤80) (n.m≤80,n∗m≤80)要 ...
- HDU 6149 Valley Numer II 状压DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6149 题意:中文题目 解法:状压DP,dp[i][j]代表前i个低点,当前高点状态为j的方案数,然后枚 ...
- HDU 6149 Valley Numer II(状压DP)
题目链接 HDU6149 百度之星复赛的题目……比赛的时候并没有做出来. 由于低点只有15个,所以我们可以考虑状压DP. 利用01背包的思想,依次考虑每个低点,然后枚举每个状态. 在每个状态里面任意枚 ...
- 状态压缩动态规划 状压DP
总述 状态压缩动态规划,就是我们俗称的状压DP,是利用计算机二进制的性质来描述状态的一种DP方式 很多棋盘问题都运用到了状压,同时,状压也很经常和BFS及DP连用,例题里会给出介绍 有了状态,DP就比 ...
- 状压DP总结
状态压缩就是将一行的状态压成一个二进制数,这个数的二进制形式反映了这一行的情况 比如0100111的意义为:这一排的第一个数没被使用,第二个被占用了,第三四个没被占用,第五六七个被占用 我们知道位运算 ...
- bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)
数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...
随机推荐
- expo-cli & React Native
expo-cli https://reactnative.dev/docs/environment-setup You will only need a recent version of Node. ...
- npm & cmd & bash & bin
npm & cmd & bash & bin bin node_modules & nested npm publish & all src files npm ...
- Chrome & install App & PWA
Chrome & install App & PWA Chrome & install website as an app chrome://apps https://medi ...
- Jenkins Ansible GitLab 自动化部署
Jenkins Ansible GitLab 自动化部署 DevOps https://www.cnblogs.com/yangjianbo/articles/10393765.html https: ...
- 星空值、SPC、算力组成三元永动机制!VAST带你把握时代!
目前中心化金融体系为用户提供的服务在便捷性和易用性方面已经达到了新高度,但随着时代发展,大众对于金融安全性和可控性的需求进一步提升,需要去中心化金融服务商来提供更具创意的解决方案.盛大公链为此在应用层 ...
- 1071 Speech Patterns——PAT甲级真题
1071 Speech Patterns People often have a preference among synonyms of the same word. For example, so ...
- eclipse定制工具栏,修改工具栏
目前eclipse定制工具栏的入口就是window- customize perspective,在弹出的窗口中选择Tool Bar Visibility,选择要在工具栏中显示的快捷图标.注:在Too ...
- 【经验】Rufus制作Win10启动盘支持UEFI:比使用UltraISO(软碟通)制作Win10操作系统U盘启动盘更快捷的工具完整教程-
ultraiso中文称之为软碟通,是一款功能强大的光盘映像文件制作/编辑/转换工具,通过它,用户可以直接编辑ISO文件和从ISO中提取文件和目录,也可以从CD-ROM制作光盘映像或者将硬盘上的文件制作 ...
- Spring-04 Bean的自动装配
Spring-04 Bean的自动装配 Bean的自动装配 1.自动装配说明 自动装配是使用spring满足bean依赖的一种方法. spring会在应用上下文中为某个bean寻找其依赖的bean. ...
- Asp.NET Core 限流控制-AspNetCoreRateLimit
起因: 近期项目中,提供了一些调用频率较高的api接口,需要保障服务器的稳定运行:需要对提供的接口进行限流控制.避免因客户端频繁的请求导致服务器的压力. 一.AspNetCoreRateLimit 介 ...