[Luogu2622]关灯问题$||$(状压$DP$)
#\(\color{red}{\mathcal{Description}}\)
现有\(n\)盏灯,以及\(m\)个按钮。每个按钮可以同时控制这\(n\)盏灯——按下了第i个按钮,对于所有的灯都有一个效果。按下\(i\)按钮对于第\(j\)盏灯,是下面\(3\)中效果之一:如果\(a[i][j]\)为1,那么当这盏灯开了的时候,把它关上,否则不管;如果为\(-1\)的话,如果这盏灯是关的,那么把它打开,否则也不管;如果是\(0\),无论这灯是否开,都不管。
现在这些灯都是开的,给出所有开关对所有灯的控制效果,求问最少要按几下按钮才能全部关掉。
#\(\color{red}{\mathcal{Solution}}\)
\(emmmm\)一开做这个题的时候是为了刷最短路水题的来着……结果发现好像需要状态压缩??等会儿,我都压完了还跑什么sb最短路啊,直接DP不就行了吗……我们发现这个题好像只要一维就行(你也找不出第二维啊),我们令\(dp_i\)表示到达状态\(i\)时所需要的最小步数,如果初始位置是全0状态,那么答案就是\(dp_{(1 << n)-1}\)(即\(n\)个灯都是开着的状态)。
然后就只要判断一下状态是否合法即可,转移时的状态转移方程就是$dp_{new} = min{dp_{last}+1} $
\(emmmm\)至于最短路什么的还是日后再说吧\(qwq\)
\(Code\)
//pks学习专用
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std ;
const int Inf = 1926081700 ;
const int MAXN = 12, MAXM = 1025 ;
int M, N, i, j, k, t, f[1 << MAXN], A[MAXM][MAXN] ;
int main(){
cin >> N >> M ;
for(i = 1; i <= M; i ++)
for(j = 1; j <= N; j ++)
cin >> A[i][j] ;
fill(f + 1, f + MAXM + 1, Inf) ;
for(i = 0; i < (1 << N); i ++)
for(k = 1; k <= M; k ++){
t = i ;
for(j = 0; j < N; j ++)
if((A[k][j + 1] == 1 && !(i & 1 << j))||
(A[k][j + 1] == -1 && (i & 1 << j)))
t ^= (1 << j) ;
f[t] = min(f[t], f[i] + 1) ;
}
if(f[(1 << N) - 1] == Inf) cout << "-1" << endl ;
else cout << f[(1 << N) - 1] << endl ;
}
随机推荐
- json的省市联动
1 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 < ...
- php中::是什么意思?
类中静态方法和静态属性的引用方法(两个冒号(::)是对类中的方法的静态引用:也就是不需要实例化对象,直接通过类名对类中的方法进行引用)例如: class Test{ public static $te ...
- 线程与全局解释器锁(GIL)
一.线程概论 1.何为线程 每个进程有一个地址空间,而且默认就有一个控制线程.如果把一个进程比喻为一个车间的工作过程那么线程就是车间里的一个一个流水线. 进程只是用来把资源集中到一起(进程只是一个资源 ...
- iframe在移动端的缩放
工作中碰到个奇怪的问题,折腾了大半天,终于算是解决了,这里把分析思路和解决办法记录下. 项目是做响应式的公司官网,前期的静态图页面切完后就提交给后台作为模板使用了,我也就基本退出项目. 在后端落地时发 ...
- 关于beginPath()和closePath()的关系>>canvas的beginPath和closePath分析总结,包括多段弧的情况
今天查了一下beginPath()和closePath()关于区域的划分问题,发现到一篇解释得很明白的文章,我就直接转载到这里了. 原文请看:canvas的beginPath和closePath分析总 ...
- 常用到的简单命令 Sublime Git NPM WindowsCMD MacTerminal(Unix命令) Vim
sublime 选择标签及其内容 ctrl+shift+a连续按两次 调出Package console: Mac: command + shift + p 安装插件: 1.调出 Package co ...
- bootstrap-table 分页增删改查之一(增加 删除)
先上效果图 引入js文件 <!--js jquery --> <script type="text/javascript" src="${pageCon ...
- Struts 2 官方文档中文版
最近正在学 Struts 2 ,咱英文水平不行啊,找到了<Struts 2 官方文档中文版>,虽然翻译的不全,有总比没有强. 地址:https://cwiki.apache.org/con ...
- org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/JJ]]
1. 如果webapps下有同名的文件,会出现以上错误: 2.解决办法: 查看项目的目录结构是否正确,对于servlet项目,WEB-INF下应该有一个classes目录,存放编译好的.class文件 ...
- YII+DWZ三级城市联动挂件
挂件PHP文件 class CountryCityCombox extends RXWidget { public $provinceId = 2; public $cityId = 3687; pu ...