bzoj3508: 开灯
题解
设\(b[i]=a[i]\ xor\ a[i+1]\)
我们可以发现,修改只会改变\(b[l-1]\)和\(b[r]\)
然后发现\(b[i]=1\)的点最多\(2*k\)个
状压\(dp\)
Code
void bfs(int s) {
memset(vis, 0, sizeof(vis));
vis[s] = 1; q.push(make_pair(s, 0));
while (!q.empty()) {
int u = q.front().first, d = q.front().second; q.pop();
if (b[u]) g[num[s]][num[u]] = d;
for (int i = 1; i <= l; i++) {
if (u + a[i] <= n && !vis[u + a[i]])
vis[u + a[i]] = 1, q.push(make_pair(u + a[i], d + 1));
if (u - a[i] >= 0 && !vis[u - a[i]])
vis[u - a[i]] = 1, q.push(make_pair(u - a[i], d + 1));
}
}
}
void solve() {
n = gi<int>(), k = gi<int>(), l = gi<int>();
memset(b, 0, sizeof(b)); tot = 0;
for (int i = 1; i <= k; i++) b[gi<int>()] = 1;
for (int i = 0; i <= n; i++)
if (b[i] ^= b[i + 1])
num[i] = tot++;
for (int i = 1; i <= l; i++) a[i] = gi<int>();
int lim = 1 << tot;
memset(g, 0x3f, sizeof(g));
memset(f, 0x3f, sizeof(f));
for (int i = 0; i <= n; i++)
if (b[i]) bfs(i);
f[0] = 0;
for (int i = 1, p; i < lim; i++) {
p = 0; while (!(i & 1 << p)) p++;
for (int j = p + 1; j < tot; j++)
if (i & 1 << j)
f[i] = min(f[i], f[i ^ 1 << p ^ 1 << j] + g[j][p]);
}
printf("%d\n", f[lim - 1] > inf ? -1 : f[lim - 1]);
return ;
}
bzoj3508: 开灯的更多相关文章
- BZOJ3508 开灯 & [校内NOIP2018模拟20181027] 密码锁
Time Limit: 10 Sec Memory Limit: 128 MB Description xx作为信息学界的大神,拥有众多的粉丝.为了感谢众粉丝的爱戴,xx决定举办一场晚会.为了气派,x ...
- 【BZOJ3508】开灯
[BZOJ3508]开灯 题面 bzoj 题解 其实变为目标操作和从目标操作变回来没有区别,我们考虑从目标操作变回来. 区间整体翻转(\(\text{Xor}\;1\))有点难受,我们考虑将这个操作放 ...
- c语言实现开灯问题
开灯问题: 有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),第3 个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依 ...
- Jquery开灯关灯效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 9509 开灯(dfs)
9509 开灯 时间限制:1000MS 内存限制:65535K提交次数:0 通过次数:0 题型: 编程题 语言: G++;GCC Description 有16的开关分别控制16盏灯,开关排列成 ...
- NYOJ 题目77 开灯问题(简单模拟)
开灯问题 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 ...
- 洛谷 P1876 开灯(思维,枚举,规律题)
P1876 开灯 题目背景 该题的题目是不是感到很眼熟呢? 事实上,如果你懂的方法,该题的代码简直不能再短. 但是如果你不懂得呢?那...(自己去想) 题目描述 首先所有的灯都是关的(注意是关!),编 ...
- 【Luogu1876】开灯(数论)
[Luogu1876]开灯(数论) 题面 题目描述 首先所有的灯都是关的(注意是关!),编号为1的人走过来,把是一的倍数的灯全部打开,编号为二的的把是二的倍数的灯全部关上,编号为3的人又把是三的倍数的 ...
- POJ 1218 THE DRUNK JAILER(类开灯问题,完全平方数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2188 题目大意:n为5-100之间的一个数,代表有多少间牢房,刚开始所有房间打开,第一轮2的倍数的房间 ...
随机推荐
- MySQL NULL 使用带来的坑
MySQL 基础篇 三范式 MySQL 军规 MySQL 配置 MySQL 用户管理和权限设置 MySQL 常用函数介绍 MySQL 字段类型介绍 MySQL 多列排序 MySQL 行转列 列转行 M ...
- 关于GPU的传输速度与什么有关??
1. i5-8250U 1.6GHz 2. PCIE 3 4K 105fps = 10.45Gps 4K 一帧 = 99.5Mbit 4K YUV444 + mask = 3840*2 ...
- SSRF(服务端请求伪造)
- LeetCode 【2】 Reverse Integer --007
六月箴言 万物之中,希望最美:最美之物,永不凋零.—— 斯蒂芬·金 第二周算法记录 007 -- Reverse Integer (整数反转) 题干英文版: Given a 32-bit signed ...
- MUI顶部导航布局
一.头部 核心css mui-bar mui-bar-nav <header class="mui-bar mui-bar-nav"> <a class=&quo ...
- 8.读写锁ReadWriteLock
/*ReadWriteLock 读写锁*/ private ReadWriteLock lock = new ReentrantReadWriteLock(); lock.readLock().loc ...
- 虚拟机和hadoop
摘要:VMware虚拟机安装Win10,Win10用虚拟机安装教程 微软发布Win10预览版下载地址后,用WMware虚拟机安装Win10是很好的选择.如何用VMware虚拟机安装Win10,Win1 ...
- 深度学习之卷积神经网络CNN及tensorflow代码实例
深度学习之卷积神经网络CNN及tensorflow代码实例 什么是卷积? 卷积的定义 从数学上讲,卷积就是一种运算,是我们学习高等数学之后,新接触的一种运算,因为涉及到积分.级数,所以看起来觉得很复杂 ...
- 【问题】No manual entry for pthread_create in section 3
参考文章:https://blog.csdn.net/wwwlyj123321/article/details/79211184 apt-get install manpages-posix manp ...
- mysql 创建用户并授权数据库
create user test identified by ‘password’:password 你要创建的用户对应的密码 grant all on database.* to test; ...