[bzoj1151][CTSC2007]动物园zoo_状压dp
动物园zoo
题目大意:https://www.lydsy.com/JudgeOnline/problem.php?id=1151
题解:
我们发现每个点只会往右延伸$5$个,这个数非常小。
再加上每个动物只有选和不选,很容易想到把每个点后面$5$个给状压到一起。
想到这里就好办了,随便弄个数组搞一搞就好。
代码:
#include <bits/stdc++.h>
#define N 50010
using namespace std;
int n, c, f[N][35], bu[N][35], last, ans;
char *p1, *p2, buf[100000];
#define nc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1 ++ )
int rd() {
int x = 0, f = 1;
char c = nc();
while (c < 48) {
if (c == '-')
f = -1;
c = nc();
}
while (c > 47) {
x = (((x << 2) + x) << 1) + (c ^ 48), c = nc();
}
return x * f;
}
int main() {
int n = rd(), c = rd();
for (int i = 1; i <= c; i ++ ) {
int a = rd(), l1 = rd(), l2 = rd();
int t1 = 0, t2 = 0;
for (int j = 1; j <= l1; j ++ ) {
t1 |= 1 << ((rd() - a + n) % n);
}
for (int j = 1; j <= l2; j ++ ) {
t2 |= 1 << ((rd() - a + n) % n);
}
for (int j = 0; j < 32; j ++ ) {
if ((j & t1) || (~j & t2)) {
bu[a][j] ++ ;
}
}
}
last = 0;
for (int j = 0; j < 32; j ++ ) {
memset(f[0], 0xef, sizeof f[0]);
f[0][j] = 0;
for (int i = 1; i <= n; i ++ ) {
for (int k = 0; k < 32; k ++ ) {
f[i][k] = max(f[i - 1][(k & 15) << 1], f[i - 1][(k & 15) << 1 | 1]) + bu[i][k];
}
}
ans = max(ans, f[n][j]);
}
cout << ans << endl ;
return 0;
}
小结:发现前i个只跟后面5个的01情况有关,我们就直接存起来f[i][S]就好。
[bzoj1151][CTSC2007]动物园zoo_状压dp的更多相关文章
- 【[APIO/CTSC2007]动物园】状压DP
题目测评:https://www.luogu.org/problemnew/show/P3622 题目描述 新建的圆形动物园是亚太地区的骄傲.圆形动物园坐落于太平洋的一个小岛上,包含一大圈围栏,每个围 ...
- 洛谷 P3622 [APIO2007]动物园【状压dp】
看成网络流建图想了好久... 实际上5个是可以状压的 设f[i][k]为到第i个围栏状态为k的方案数,因为考虑到重复,设g[i][k]记录i开始,状态为k的孩子有几个 状态转移很好想:f[j][k]= ...
- [BZOJ1151][CTSC2007]动物园zoo 解题报告|DP|位运算
Description 最近一直在为了学习算法而做题,这道题是初一小神犇让我看的.感觉挺不错于是写了写. 这道题如果是一条线的话我们可以构造一个DP f[i,j]表示以i为起点,i,i+1...i+4 ...
- 2018.09.08 bzoj1151: [CTSC2007]动物园zoo(状压dp)
传送门 状压dp好题啊. 可以发现这道题的状压只用压缩5位. f[i][j]表示当前在第i个位置状态为j的最优值. 显然可以由f[i-1]更新过来. 因此只用预处理在第i个位置状态为j时有多少个小朋友 ...
- 状压dp学习笔记(紫例题集)
P3451旅游景点 Tourist Attractions 这个代码其实不算是正规题解的(因为我蒟蒻)是在我们的hzoj上内存限制324MIB情况下过掉的,而且经过研究感觉不太能用滚动数组,所以那这个 ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- nefu1109 游戏争霸赛(状压dp)
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
随机推荐
- 02_通过位置变量创建 Linux 系统账户及密码
#!/bin/bash#$1 是执行脚本的第一个参数,$2 是执行脚本的第二个参数useradd "$1"echo "$2" | passwd --stdin ...
- ps/top
ps -e 显示所有进程,环境变量 -f 全格式显示 -a 显示所有用户的所有进程(包括其他用户) -u 按用户名和启动时间的顺序显示进程 -x 显示无控制终端的进程 -w 显示加宽可以显示较多信息 ...
- SpringMVC配置数据验证(JSR-303)
这篇文章已经过时了. 请参考比较合适的前后端交互方式. 1.pom.xml中追加hibernate-validator 2.在dto类的域上追加JSR-303的注解 public class Data ...
- Selenium中使用Cookies绕过登录
在使用selenium测试后台时常常每个流程都需要走登录流程,这样自然比较浪费时间.如果遇到登录需要输入验证码等情况,就可能出师未捷身先死. 在Web应用中,登录状态通常是通过Cookie中对应的se ...
- phpstorm+xdebug安装配置
这个问题也困惑了我好久 烦死了 今天看了qing师傅的博客 跟着安装 运行环境: phpStorm 2018 PHP 5.45 nts VC9 Xdebug 2.4.1 0x01 PHP安装xdebu ...
- 图论——最小生成树:Prim算法及优化、Kruskal算法,及时间复杂度比较
最小生成树: 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边.简单来说就是有且仅有n个点n-1条边的连通图. 而最小生成树就是最小权 ...
- K-Means算法及代码实现
1.K-Means算法 K-Means算法,也被称为K-平均或K-均值算法,是一种广泛使用的聚类算法.K-Means算法是聚焦于相似的无监督的算法,以距离作为数据对象间相似性度量的标准,即数据对象间的 ...
- SQL-W3Chool-高级:SQL CREATE DATABASE 语句
ylbtech-SQL-W3Chool-高级:SQL CREATE DATABASE 语句 1.返回顶部 1. CREATE DATABASE 语句 CREATE DATABASE 用于创建数据库. ...
- Android:高通平台性能调试
1.GPU / CPU 信息打印脚本 gpu_cpu_info.bat @echo off echo "==================GPU====================== ...
- kotlin之函数的基本用法
fun main(arg: Array<String>) { val )//调用函数 print(double) } fun double(x:Int):Int{ *x } kotlin函 ...