题目传送门

  传送点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. 剑指offer——python【第30题】连续子数组的最大和

    题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...

  2. 这 10 款良心 Windows 软件,改变你对国产的认知

    提起国产 Windows 软件,你可能首先想到的是捆绑安装.弹窗广告.卸载残留等关键词.尽管一些所谓「大厂」的确致力于拉低业界的下限,但依然有开发者坚守底线,为改变整个生态圈而默默努力.今天,少数派就 ...

  3. vins-mono的边缘化分析

    ##marg 基础   摘自贺一家的博客 在我们这个工科领域,它来源于概率论中的边际分布(marginal distribution).如从联合分布p(x,y)去掉y得到p(x),也就是说从一系列随机 ...

  4. (一)juc线程高级特性——volatile / CAS算法 / ConcurrentHashMap

    1. volatile 关键字与内存可见性 原文地址: https://www.cnblogs.com/zjfjava/category/979088.html 内存可见性(Memory Visibi ...

  5. centos6 安装python2.7 并做软件兼容处理 及 MySQLdb模块安装

    相关软件准备 https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tgz https://pypi.org/project/setuptool ...

  6. darknet集成遇到的问题以及解决方法

    将darknet集成进工程时,遇到了一些问题,下面记录一下解决方法: 集成步骤: 首先在yolo编译的时候,需要将三个开关打开: #define GPU#define CUDNN#define OPE ...

  7. Ubuntu上Qt之简单图片浏览器

     >>主要功能: (1)图片切换浏览,上一张/下一张. (2)图片放大.缩小.包括两种机制:鼠标滚轮和按钮放大/缩小. (3)图片自动循环播放,间隔2s.点击播放后,其他操作均无效,直至点 ...

  8. C#编程基础(简单概述与理解)

    1.C#变量和数据输入 C#常用到的几个数据类型: 整型:int 说明:32位有符号整数 范围:-2³¹~2³¹-1 浮点型:double 说明:64位双精度浮点数 范围:±5.0×10-­﹣³²~± ...

  9. 手写RPC框架

    https://www.bilibili.com/video/av23508597?from=search&seid=6870947260580707913 https://github.co ...

  10. [js]js设计模式-原型模式

    构造函数模型- 对象的属性和方法每人一份 function createJs(name, age) { this.name = name; this.age = age; this.writeJs = ...