广告

绿树公司 - 官方网站:https://wangping-lvshu.github.io/LvshuNew/

绿树智能 - 官方网站:https://wangping-lvshu.github.io/LvshuZhineng/

(现在使用,人人均可获得300元大奖)

[APIO2007] 动物园

题目描述

新建的圆形动物园是亚太地区的骄傲。圆形动物园坐落于太平洋的一个小岛上,包含一大圈围栏,每个围栏里有一
种动物。如下图所示:

你是动物园的公共主管。你要做的是,让每个来动物园的人都尽可能高兴。今天有一群小朋友来动物园参观,你希望能让他们在动物园度过一段美好的时光。但这并不是一件容易的事——有的动物有一些小朋友喜欢,有的动物有一些小朋友害怕。如,

Alex

\texttt{Alex}

Alex 喜欢可爱的猴子和考拉,而害怕拥牙齿锋利的狮子。而

Polly

\texttt{Polly}

Polly 会因狮子有美丽的鬃毛而喜欢它,但害怕有臭味的考拉。你可以选择将一些动物从围栏中移走以使得小朋友不会害怕。但你不能移走所有的动物,否则小朋友们就没有动物可看了。每个小朋友站在大围栏圈的外面,可以看到连续的

5

5

5 个围栏。你得到了所有小朋友喜欢和害怕的动物信息。当下面两处情况之一发生时,小朋友就会高兴:

  • 至少有一个他害怕的动物被移走
  • 至少有一个他喜欢的动物没被移走

例如,考虑下图中的小朋友和动物:

  • 假如你将围栏

    4

    4

    4 和

    12

    12

    12 的动物移走。

    Alex

    \texttt{Alex}

    Alex 和

    Ka-Shu

    \texttt{Ka-Shu}

    Ka-Shu 将很高兴,因为至少有一个他们害怕的动物被移走了。这也会使

    Chaitanya

    \texttt{Chaitanya}

    Chaitanya 高兴,因为他喜欢的围栏

    6

    6

    6 和

    8

    8

    8 中的动物都保留了。但是,

    Polly

    \texttt{Polly}

    Polly 和

    Hwan

    \texttt{Hwan}

    Hwan 将不高兴,因为他们看不到任何他们喜欢的动物,而他们害怕的动物都还在。这种安排方式使得三个小朋友高兴。

  • 现在,换一种方法,如果你将围栏

    4

    4

    4 和

    6

    6

    6 中的动物移走,

    Alex

    \texttt{Alex}

    Alex 和

    Polly

    \texttt{Polly}

    Polly 将很高兴,因为他们害怕的动物被移走了。

    Chaitanya

    \texttt{Chaitanya}

    Chaitanya 也会高兴,虽然他喜欢的动物

    6

    6

    6 被移走了,他仍可以看到围栏

    8

    8

    8 里面他喜欢的动物。同样的 Hwan 也会因可以看到自己喜欢的动物

    12

    12

    12 而高兴。唯一不高兴的只有

    Ka-Shu

    \texttt{Ka-Shu}

    Ka-Shu。

  • 如果你只移走围栏

    13

    13

    13 中的动物,

    Ka-Shu

    \texttt{Ka-Shu}

    Ka-Shu 将高兴,因为有一个他害怕的动物被移走了,

    Alex

    \texttt{Alex}

    Alex,

    Polly

    \texttt{Polly}

    Polly,

    Chaitanya

    \texttt{Chaitanya}

    Chaitanya 和

    Hwan

    \texttt{Hwan}

    Hwan 也会高兴,因为他们都可以看到至少一个他们喜欢的动物。所以有

    5

    5

    5 个小朋友会高兴。这种方法使得了最多的小朋友高兴。

输入格式

输入的第一行包含两个整数

N

N

N,

C

C

C,用空格分隔。

N

N

N 是围栏数(

10

N

1

0

4

10 \le N \le 10^4

10≤N≤104),

C

C

C 是小朋友的个数(

1

C

5

×

1

0

4

1 \le C \le 5\times 10^4

1≤C≤5×104)。

围栏按照顺时针的方向编号为

1

,

2

,

3

,


,

N

1,2,3,\cdots,N

1,2,3,⋯,N。

接下来的

C

C

C 行,每行描述一个小朋友的信息,以下面的形式给出:

E

,

F

,

L

,

X

1

,

X

2

,


,

X

F

,

Y

1

,

Y

2

,


,

Y

L

E, F, L ,X_1, X_2 ,\cdots ,X_F ,Y_1 ,Y2 ,\cdots ,Y_L

E,F,L,X1​,X2​,⋯,XF​,Y1​,Y2,⋯,YL​。

其中:

E

E

E 表示这个小朋友可以看到的第一个围栏的编号(

1

E

N

1 \le E \le N

1≤E≤N),换句话说,该小朋友可以看到的围栏为

E

E

E,

E

+

1

E+1

E+1,

E

+

2

E+2

E+2,

E

+

3

E+3

E+3,

E

+

4

E+4

E+4。

注意,如果编号超过

N

N

N 将继续从

1

1

1 开始算。

如:当

N

=

14

N=14

N=14,

E

=

13

E=13

E=13 时,这个小朋友可以看到的围栏为

13

,

14

,

1

,

2

13,14,1, 2

13,14,1,2 和

3

3

3。

F

F

F 表示该小朋友害怕的动物数。

L

L

L 表示该小朋友喜欢的动物数。

围栏

X

1

,

X

2

,


,

X

F

X_1, X_2, \cdots, X_F

X1​,X2​,⋯,XF​ 中包含该小朋友害怕的动物。

围栏

Y

1

,

Y

2

,


,

Y

L

Y1, Y2, \cdots, Y_L

Y1,Y2,⋯,YL​ 中包含该小朋友喜欢的动物。

X

1

,

X

2

,


,

X

F

,

Y

1

,

Y

2

,


,

Y

L

X_1, X_2, \cdots, X_F, Y_1, Y_2, \cdots, Y_L

X1​,X2​,⋯,XF​,Y1​,Y2​,⋯,YL​ 是两两不同的整数,而且所表示的围栏都是该小朋友可以看到的。

小朋友已经按照他们可以看到的第一个围栏的编号从小到大的顺序排好了(这样最小的

E

E

E 对应的小朋友排在第一个,最大的

E

E

E 对应的小朋友排在最后一个)。

注意可能有多于一个小朋友对应的

E

E

E 是相同的。

输出格式

仅输出一个数,表示最多可以让多少个小朋友高兴。

输入输出样例

样例输入1

14 5
2 1 2 4 2 6
3 1 1 6 4
6 1 2 9 6 8
8 1 1 9 12
12 3 0 12 13 2

样例输出1

5

样例输入2

12 7
1 1 1 1 5
5 1 1 5 7
5 0 3 5 7 9
7 1 1 7 9
9 1 1 9 11
9 3 0 9 11 1
11 1 1 11 1

样例输出2

6

说明/提示

数据范围
对于

100

%

100\%

100% 的数据,

10

N

1

0

4

10 \le N \le 10^4

10≤N≤104,

1

C

5

×

1

0

4

1 \le C \le 5\times 10^4

1≤C≤5×104,

1

E

N

1 \le E \le N

1≤E≤N。

样例说明

  • 第一个样例是题目描述中的例子,所有的

    C

    =

    5

    C=5

    C=5 个小朋友都能高兴。

  • 第二个样例是一个不能使得所有

    C

    =

    7

    C=7

    C=7 个小朋友都高兴的例子。

Code

#include <bits/stdc++.h>
using namespace std;
int n, m, ans, f[50001][40], num[50001][40]; int main()
{
cin >> n >> m;
for (int i = 1, j, E, F, L, t, sta1, sta2; i <= m; ++i)
{
for (cin >> E >> F >> L, j = 1, sta1 = sta2 = 0; j <= F; ++j)
cin >> t, t = (t - E + n) % n, sta1 |= 1 << t;
for (j = 1; j <= L; ++j)
cin >> t, t = (t - E + n) % n, sta2 |= 1 << t;
for (j = 0; j < 32; ++j)
if ((j & sta1) || (~j & sta2))
++num[E][j];
}
for (int i = 0; i < 32; ans = max(f[n][i], ans), ++i)
{
memset(f[0], -0x3f, sizeof(f[0])), f[0][i] = 0;
for (int j = 1; j <= n; ++j)
for (int k = 0; k < 32; ++k)
f[j][k] = max(f[j - 1][(k & 15) << 1], f[j - 1][(k & 15) << 1 | 1]) + num[j][k];
}
cout << ans;
return 0;
}

P3622 [APIO2007]【一本通提高状态压缩类动态规划】动物园的更多相关文章

  1. 【BZOJ2734】【HNOI2012】集合选数(状态压缩,动态规划)

    [BZOJ2734][HNOI2012]集合选数(状态压缩,动态规划) 题面 Description <集合论与图论>这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所 ...

  2. 【NOIP2017】宝藏(状态压缩,动态规划)

    [NOIP2017]宝藏(状态压缩,动态规划) 题面 洛谷 题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的 m 条道路 ...

  3. 洛谷P2258 子矩阵 题解 状态压缩/枚举/动态规划

    作者:zifeiy 标签:状态压缩.枚举.动态规划 题目链接:https://www.luogu.org/problem/P2258 这道题目状态压缩是肯定的,我们需要用二进制来枚举状态. 江湖上有一 ...

  4. 插头DP(基于连通性状态压缩的动态规划问题)(让你从入门到绝望)

    今天,我,Monkey king 又为大家带来大(ju)佬(ruo)的算法啦!--插头DP 例题(菜OJ上的网址:http://caioj.cn/problem.php?id=1489): 那么,这道 ...

  5. HOJ-2662Pieces Assignment(状态压缩,动态规划)

    Pieces Assignment Source : zhouguyue Time limit : 1 sec Memory limit : 64 M Submitted : 415, Accepte ...

  6. 【NOI2001】炮兵阵地(状态压缩,动态规划)

    题面 题面中有图片的存在,所以就贴个地址把 题解 简单题,,,, 原来一直觉得不会做... 现在发现是一道傻逼题 暴力压两行的状态 发现就需要滚一维. 然后暴力检查一下状态的可行性 DP检查MAX就可 ...

  7. 【BZOJ1087】【SCOI2005】互不侵犯(状态压缩,动态规划)

    题面 这种傻逼题懒得粘贴了... 题解 傻逼题 \(f[i][j][k]\)表示当前第\(i\)列,当前放置状态为\(j\),已经放了\(k\)个 暴力判断状态合法性,暴力判断转移合法性,然后统计答案 ...

  8. HDU-4539郑厂长系列故事——排兵布阵(状态压缩,动态规划)

    郑厂长系列故事--排兵布阵 Time Limit : 10000/5000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total ...

  9. caioj1495: [视频]基于连通性状态压缩的 动态规划问题:Formula 2

    本来想写一天插头的,但是这题太难受(绝望)500+的代码量..我选择下午放松一下. 先ORZ一下苏大佬(yz的cdq啊%%%%%)居然把cdq论文里面的题抠出来出数据放在c站(呵呵真是个悲伤的故事不过 ...

随机推荐

  1. Unreal 输入系统 解析

    前言 输入系统,输入某个键,响应到GamePlay层做对应的事.例如 点击鼠标,前进还是开枪之类,是如何响应的.这里只说应用层逻辑,硬件层逻辑不讲述. 详解 1.问题来源 先看下面一个例子:跳跃的事件 ...

  2. Windows Terminal无法加载WSL [process exited with code 4294967295 (0xffffffff)]

    在Windows Terminal中WSL无法打开错误代码是 process exited with code 4294967295 (0xffffffff),但在命令行中 通过 "C:\W ...

  3. C#/VB.NET 创建图片超链接

    超链接(Hyperlink)可以看做是一个"热点",它可以从当前Web页定义的位置跳转到其他位置,包括当前页的某个位置.Internet.本地硬盘或局域网上的其他文件,甚至跳转到声 ...

  4. C# .NET ML.NET 机器学习 图像分类

    一. 准备工作 IDE是 VS2019.先下载好"resnet_v2_50_299.meta"这个文件,放入"C:\Users\jk\AppData\Local\Temp ...

  5. unity---3D数学基础

    点乘 A·B 判断敌人在前方还是后方 调试画线 画线段 前两个参数 分别是 起点 终点 画射线 前两个参数 分别是 起点 方向 Debug.DrawLine(this.transform.positi ...

  6. WPF 分组

    分组和树形结构是不一样的. 树形结构是以递归形式存在.分组是以键值对存在的形式,类似于GroupBy这样的形式. 举个例子 ID NAME SEX Class 1 张三 男 1 2 李四 女 2 3 ...

  7. 将汇总结果导出到MySQL

    ①mysql建表test1 ②cd /opt/module/sqoop进入scoop路径 ③ bin/sqoop export \ > --connect jdbc:mysql://master ...

  8. 用python解决打标签时将xml文件的标签名打错

    用python解决打标签时将xml文件的标签名打错 问题描述:再进行达标签时将magnetic_tile的标签名错误的打成了magnetic_title,又不想一张一张的修改 出现问题的xml文件 & ...

  9. 1.数据结构《Pytorch神经网络高效入门教程》Deeplizard

    当移动一个数组或向量时,我们需要一个索引:二维数组/矩阵需要两个索引, 比如说标量是零维张量,数组/向量/矢量是一维张量,矩阵是是二维张量,n维数组是n维张量. 如果我们被告知,  假设有一个张量t, ...

  10. 4. Docker自定义镜像

    下面制作镜像: 此时,验证一下: 以上验证都是成功的,到此就可以把刚才建立并经过刚才运行并验证的镜像包通过各种方式传递给其他人来部署使用了,并且环境肯定是可你统一的.