Codeforces 436D Pudding Monsters
题意简述
开始有无限长的一段格子,有n个格子种有布丁怪兽,一开始连续的布丁怪兽算一个布丁怪兽。
每回合你可以将一个布丁怪兽向左或右移动,他会在碰到第一个布丁怪兽时停下,并与其合并。
有m个特殊格子,询问最终你最多可以让几个特殊的格子上被布丁覆盖。
题解思路
dp
f[i]表示前i个布丁最多可覆盖的特殊格子数
g[i]表示前i个布丁,第i个不动的情况下最多可覆盖的特殊格子数
可得转移方程:
g[i] = max(g[i], f[l[i - len] - 1] + sum(b[j], a[i]));
f[r[i + len]] = max(f[r[i + len]], g[i] + sum(a[i] + 1, b[j]));
其中
l[i],r[i]表示第i个布丁所属的怪兽的最左边格子编号和最右边格子编号
len 是枚举特殊格子位置与i的距离
sum(a, b) 表示a,b之间的特殊格子数
代码
#include <cstdio>
#include <algorithm>
const int Maxn = 100010;
int n, m, ll, len;
int a[Maxn], b[Maxn], s[Maxn << 1], l[Maxn], r[Maxn];
int f[Maxn], g[Maxn];
inline void mmax(int& x, const int& y) { if (y > x) x = y; }
inline int sum(const int& x, const int& y) {return s[y] - s[x - 1]; }
int main()
{
scanf("%d%d", &n, &m);
for (register int i = 1; i <= n; ++i) scanf("%d", &a[i]);
for (register int i = 1; i <= m; ++i)
{
scanf("%d", &b[i]);
++s[b[i]];
}
std::sort(a + 1, a + n + 1);
std::sort(b + 1, b + m + 1);
a[0] = -300000; a[n + 1] = 300000;
for (register int i = 1; i <= n; ++i)
if (a[i] == a[i - 1] + 1) l[i] = l[i - 1];
else l[i] = i;
for (register int i = n; i; --i)
if (a[i] == a[i + 1] - 1) r[i] = r[i + 1];
else r[i] = i;
for (register int i = 1; i <= 200000; ++i) s[i] += s[i - 1];
for (register int i = 1; i <= n; ++i)
{
mmax(f[i], f[i - 1] + sum(a[i], a[i]));
mmax(g[i], f[i - 1] + sum(a[i], a[i]));
for (register int j = 1; j <= m && (len = a[i] - b[j]) > 0; ++j)
if (len < i)
mmax(g[i], f[l[i - len] - 1] + sum(b[j], a[i]));
mmax(f[i], g[i]);
for (register int j = m; j && (len = b[j] - a[i]) >= 0; --j)
if (len <= n - i)
mmax(f[r[i + len]], g[i] + sum(a[i] + 1, b[j]));
}
printf("%d\n", f[n]);
}
Codeforces 436D Pudding Monsters的更多相关文章
- Codeforces 436D - Pudding Monsters(dp)
Codeforces 题目传送门 & 洛谷题目传送门 u1s1 这题数据范围有点迷惑啊--乍一看 \(\mathcal O(nm)\) 过不去,还以为是正解是 \(\mathcal O(n+m ...
- Codeforces 526F Pudding Monsters - CDQ分治 - 桶排序
In this problem you will meet the simplified model of game Pudding Monsters. An important process in ...
- Codeforces 526F Pudding Monsters
先把题目抽象一下: 有一个静态的数组,求有多少个区间[i,j]满足:j-i==max{ai,...,aj}-min{ai,...,aj} 也就是要求max-min+i-j==0的区间数 所以肿么做呢? ...
- 奇袭 CodeForces 526F Pudding Monsters 题解
考场上没有认真审题,没有看到该题目的特殊之处: 保证每一行和每一列都恰有一只军队,即每一个Xi和每一个Yi都是不一样 的. 于是无论如何也想不到复杂度小于$O(n^3)$的算法, 只好打一个二维前缀和 ...
- 【CF526F】Pudding Monsters cdq分治
[CF526F]Pudding Monsters 题意:给你一个排列$p_i$,问你有对少个区间的值域段是连续的. $n\le 3\times 10^5$ 题解:bzoj3745 Norma 的弱化版 ...
- [Codeforces526F]Pudding Monsters 分治
F. Pudding Monsters time limit per test 2 seconds memory limit per test 256 megabytes In this proble ...
- CodeForces526F:Pudding Monsters (分治)
In this problem you will meet the simplified model of game Pudding Monsters. An important process in ...
- CF526F Pudding Monsters
CF526F Pudding Monsters 题目大意:给出一个\(n* n\)的棋盘,其中有\(n\)个格子包含棋子. 每行每列恰有一个棋子. 求\(k*k\)的恰好包含\(k\)枚棋子的子矩形个 ...
- 「CF526F」 Pudding Monsters
CF526F Pudding Monsters 传送门 模型转换:对于一个 \(n\times n\) 的棋盘,若每行每列仅有一个棋子,令 \(a_x=y\),则 \(a\) 为一个排列. 转换成排列 ...
随机推荐
- Python PyQT5的入门使用
Python 3+ PyQT5的入门使用 窗口类型介绍 QMainWindow,QWidget和QDialog都是用来创建窗口的.可以直接使用也可以继承后再使用. QMainWindow 该类窗口可以 ...
- Java EE核心框架实战(1)
内容前言:本书适合具有一定Java编程基础的读者阅读,增强其项目实战能力. 2014年9月第1版 下载本书所有源代码可通过 http://pan.baidu.com/s/1i3sshXr 本书配套的 ...
- CSharp初级篇 1-4 this、索引器、静态、常量以及只读
.NET Core CSharp初级篇 1-4 本节内容为this.索引器.静态.常量以及只读 简介 在之前的课程中,我们谈论过了静态函数和字段的一小部分知识,本节内容中,我们将详细的讲解关于对象操作 ...
- 个人永久性免费-Excel催化剂功能第48波-拆分工作薄内工作表,堪称Excel界的单反
一个工作薄有多个相同类型的工作表,然后想通过批量操作,把每个工作表都另存为一个工作薄文件,这个批量拆分工作薄,绝大多数插件都有此功能,就如懂点VBA的高级用户也常常有点不屑于用插件来完成,自己写向行V ...
- [PTA] 数据结构与算法题目集 6-7 在一个数组中实现两个堆栈
//如果堆栈已满,Push函数必须输出"Stack Full"并且返回false:如果某堆栈是空的,则Pop函数必须输出"Stack Tag Empty"(其中 ...
- [leetcode] #213 House Robber II Medium (medium)
原题链接 比子母题House Robber多了一个条件:偷了0以后,第n-1间房子不能偷. 转换思路为求偷盗[0,n-1)之间,以及[1,n)之间的最大值. 用两个DP,分别保存偷不偷第0间房的情况. ...
- [virtualenvwrapper] 命令小结
创建环境 mkvirtualenv env1 mkvirtualenv env2 环境创建之后,会自动进入该目录,并激活该环境. 切换环境 workon env1 workon env2 列出已有环境 ...
- PHP--仿微信, 通过登陆者用户名显示好友列表,显示头像和昵称
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 初始SpringMVC 完整版
初始SpringMVC 1.SpringMVC 也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的. 2.Java EE ...
- 19个心得,明明白白说Linux下的负载均衡
一.目前网站架构一般分成负载均衡层.web层和数据库层,我其实一般还会多加一层,即文件服务器层,因为现在随着网站的PV越来越多,文件服务器的压力也越来越大;不过随着moosefs.DRDB+Heart ...