题目传送门

  传送点I

  传送点II

题目大意

  给定$n$个区间,问恰好删去其中$k$个,剩下的区间的并的最大总长度。

  显然被包含的区间一定不优。再加上被包含的区间对计数不友好。直接把它删掉。

  注意到题目说恰好,其实是骗人的。多删几个也不会影响(删太多了就有影响了)。

  按照右端点排序,然后用$f[i][j]$表示考虑前$i$个区间,已经选了删掉$j$个。

  考虑转移,第一种情况是第$i$个区间不选,直接通过$i - 1$转移。

  第二种情况是要选$i$。然后要计算贡献。这时考虑上一个选择的是什么?

  • 如果和第$i$个区间有相交,那么显然选择左端点最小的一个和当前区间相交的线段作为上一个。然后中间的线段全部删掉(因为它们被包含了。)。答案补上这个区间覆盖不到的但当前区间能够覆盖的地方。(如果上一个不是选的这个区间也无妨,因为这样一定没有下面这样的转移优)
  • 否则从左端点最小的一个区间的前一个区间转移。答案加上当前区间长度。

Code

 /**
* bzoj
* Problem#5185
* Accepted
* Time: 1140ms
* Memory: 43876k
*/
#include <bits/stdc++.h>
using namespace std;
typedef bool boolean; typedef class Segment {
public:
int l, r; boolean operator < (Segment b) const {
if (r ^ b.r) return r < b.r;
return l < b.l;
}
}Segment; const int N = 1e5 + , K = ; int n, m, k;
Segment* bs;
Segment* ss;
int f[N][K]; inline void init() {
scanf("%d%d", &n, &k);
bs = new Segment[(n + )];
ss = new Segment[(n + )];
for (int i = ; i <= n; i++)
scanf("%d%d", &bs[i].l, &bs[i].r);
} inline void solve() {
sort(bs + , bs + n + );
for (int i = ; i <= n; i++) {
if (i == || bs[i].r != bs[i - ].r)
ss[++m] = bs[i];
else
k--;
} int mil = (signed) (~0u >> );
n = ;
for (int i = m; i; i--) {
if (ss[i].l < mil)
bs[++n] = ss[i], mil = ss[i].l;
else
k--;
}
sort(bs + , bs + n + );
k = max(k, );
memset(f, 0x80, sizeof(f[]) * (m + ));
int p = ;
f[][] = ;
for (int i = ; i <= n; i++) {
while (p <= i && bs[p].r < bs[i].l)
p++;
assert(p <= i);
for (int j = ; j <= k; j++)
f[i][j] = max(f[i][j], f[i - ][j - ]);
f[i][k] = max(f[i][k], f[i - ][k]); for (int j = ; j <= k; j++) {
int cj = min(j + i - p - , k);
if (p ^ i)
f[i][cj] = max(f[i][cj], f[p][j] + bs[i].r - bs[p].r);
cj = min(cj + , k);
f[i][cj] = max(f[i][cj], f[p - ][j] + bs[i].r - bs[i].l);
}
}
printf("%d\n", f[n][k]);
} int main() {
init();
solve();
return ;
}

bzoj 5185 Lifeguards - 动态规划 - 贪心的更多相关文章

  1. BZOJ 1029 建筑抢修 贪心+堆

    又搞了一晚上OI,编了两道BZOJ和几道NOI题库,临走之前写两篇感想 noip越来越近了,韩大和clove爷已经开始停课虐我们了... 1029: [JSOI2007]建筑抢修 Time Limit ...

  2. [bzoj 2151]种树(贪心)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2151 分析:原型是bzoj 1150(CTSC 2007) 首先DP无法下手,想到贪心.想到贪 ...

  3. BZOJ.5397.circular(随机化 贪心)

    BZOJ 感觉自己完全没做过环上选线段的问题(除了一个2-SAT),所以来具体写一写qwq. 基本完全抄自remoon的题解qwq... (下标从\(0\sim m-1\)) 拆环为链,对于原线段\( ...

  4. hdu 1257 最少拦截系统(动态规划 / 贪心)

    最少拦截系统 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  5. 洛谷P1095守望者的逃离题解-伪动态规划/贪心

    链接 题目描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很 ...

  6. 二叉树遍历问题、时间空间复杂度、淘汰策略算法、lru数据结构、动态规划贪心算法

    二叉树的前序遍历.中序遍历.后序遍历 前序遍历 遍历顺序规则为[根左右] ABCDEFGHK 中序遍历 遍历顺序规则为[左根右] BDCAEHGKF 后序遍历 遍历顺序规则为[左右根] DCBHKGF ...

  7. BZOJ.3252.攻略(贪心 长链剖分/线段树)

    题目链接 贪心,每次选价值最大的一条到根的链.比较显然(不选白不选). 考虑如何维护这个过程.一个点的价值选了就没有了,而它只会影响它子树里的点,可以用DFS序+线段树修改.而求最大值也可以用线段树. ...

  8. BZOJ.4245.[ONTAK2015]OR-XOR(贪心)

    题目链接 从高到低位贪心,判断答案的该位能否为0. 求一个前缀和sum.对于最高位,答案的这一位可以为0当且仅当至少存在m个位置满足sum[i]在这一位上为0. 注意sum[n]这一位必须为0. 如果 ...

  9. BZOJ 3143 游走(贪心+期望+高斯消元)

    一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分 ...

随机推荐

  1. Spring的事务管理基础知识

    1.数据库事务基础知识     1)数据库事务有严格的定义,它必须同时满足4个特性:原子性(Atomic).一致性(Consistency).隔离性(Isolation)和持久性(Durability ...

  2. JDK 5.0 注解知识快速进阶

    1.了解注解 对于Java开发人员来说,在编写代码时,除了源程序外,还会使用Javadoc标签对类.方法或成员变量进行注释,一遍使用Javadoc工具生成和源代码配套的Javadoc文件,如@para ...

  3. vmare 往 virtualbox迁移

    vmare实在太卡了.抓狂. 于是想迁移到virtualbox观察下. 谷歌了下方案,发现众说纷纭. 有操作超级复杂的,比如:http://stackoverflow.com/questions/69 ...

  4. 9 ArcGIS Server 性能优化

    1.系统性能影响因子 地图.服务类型.数据源.客户端技术.CPU.数据结构.网络.内存.存储.部署.架构.服务接口.SDE等. 2.ArcGIS Server性能优化 数据结构与数据源:数据结构(矢量 ...

  5. python----运行机制

    Python 是一门解释型的编程语言,因此它具有解释型语言的运行机制. 计算机程序,其实就是一组计算机指令集,能真正驱动机器运行的是机器指令,但让普通开发者直接编写机器指令是不现实的,因此就出现了计算 ...

  6. vue的数据双向绑定和ref获取dom节点

    vue是一个MVVM的框架 业务逻辑代码即js部分是model部分, html是view部分. 当model改变的时候,view也会改变 view 改变是,model也会改变 <template ...

  7. lsass.exe占用cpu 解决方法

    最终解决办法如下: RD /s /q "%USERPROFILE%\AppData\Roaming\Microsoft\Protect"

  8. virtualenv与virtualenvwrapper虚拟环境

    python开发之virtualenv与virtualenvwrapper讲解 在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题: 亦或者是在开发过程中不想让物 ...

  9. stm32专属于菜鸟的学习方法

    1.首先我们先看看与STM32相关的文档 我们假定大家已经对STM32的书籍或者文档有一定的理解.如不理解,请立即阅读STM32的文档,以获取最基本的知识点. 如果你手上拥有ST官方主推的STM32神 ...

  10. finance1:专业词汇

    1,沙盘演练:沙盘演练又叫沙盘模拟培训.沙盘推演,源自西方军事上的战争沙盘模拟推演,是通过引领学员进入一个模拟的竞争性行业,由学员分组建立若干模拟公司,围绕形象直观的沙盘教具,实战演练模拟企业的经营管 ...