题目传送门

  传送点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. Solve Error: Library not loaded: @rpath/RoutingHTTPServer.framework/RoutingHTTPServer

    在配置WebDriverAgent的时候,可能会遇到如下的错误: 2018-01-04 09:53:42.759370-0600 WebDriverAgentRunner-Runner[318:133 ...

  2. cf954H

    挖我自闭了这是什么东西啊. 给出一棵深度为  的树,其中深度为  的节点有  个儿子.问树上的简单路径中长度在  之间的每个有多少条.  表示对于在  层的  个节点,向下走  步的方案数  表示对于 ...

  3. Ubuntu 安装 JDK8

    安装python-software-properties $sudo apt-get install python-software-properties $sudo apt-get install ...

  4. requirejs配置问题

    <script src="lib/requirejs/require.js " data-main="js/main.js"> </scrip ...

  5. python中文分词库——pynlpir

    安装 pip install pynlpir import pynlpir #加载包 pynlpir.open() #加载nlpir的库,这步是必须的 #否则会出现 段错误/段转储 segment f ...

  6. eclipse与hadoop-eclipse-plugin之间的版本对应关系

    eclipse与hadoop-eclipse-plugin之间,版本互相不兼容,或者说,版本要求严格. 把hadoop-eclipse-plugin复制到eclipse的plugins目录下以后,如果 ...

  7. React中redux表单编辑

    reduxForm中反写数据在输入框中,数据是从别的模块拉取 // 编辑应用表单 class EditCode extends React.Component { constructor(props) ...

  8. CORS jsonp

    现在碰到了请求跨域的问题,结合前面讲的一些概念,我们大致可以猜到解决跨域请求的两种方式: 在服务端启用CORS.让无服务端拥有处理JSONP的能力.这两种跨域解决方案的区别是什么呢? JSONP只支持 ...

  9. nexus2 配置

    <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Soft ...

  10. Linux学习5-CentOS安装Python3.6环境和pip3

    前言 centos7 自带有 python,但是却是 python2 版本的 python,如果你想安装个python3怎么办呢? 如果直接删除python2的话,可能会引起其他的问题,因为有些东西是 ...