原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round4-B.html

题目传送门 - https://www.nowcoder.com/acm/contest/142/B

题意

  给定 $n$ 条带权线段,第 $i$ 条线段的左右端点坐标分别 $x_i,y_i$ ,权值为 $w_i$ ,坐标范围是 $[1,m]$ 。

  现在让你从这 $n$ 条线段中选择一些线段,要求这些线段能覆盖 $[1,m]$ 中的任何一个整点。

  定义 $f(x)$ 为当前方案中覆盖到坐标 $x$ 的线段的权值和。

  问:对于所有的选择线段的方案,$\max(f(x)|x\in [1,m])$ 的最小值为多少。

  多组数据。

  $n,m\leq 2000,w_i\leq 1000,\sum n\leq 20000$

题解

  讲题人说要线段树??

  直接 $O(nm)$ dp 啊。

  首先我们证明两个结论:

  1.  选出来的线段不存在包含关系。——如果这样的话删掉被包含的那条显然更好

  2.  任何一个点最多被两个线段覆盖。——如果有三条覆盖同一个点,那么一定可以删除其中一条,并满足剩下的线段仍然覆盖所有点。

  这两个性质十分优秀!于是我们就可以 dp 了。

  我们先把所有的线段按照右端点从小到大排序。

  记 $dp_{i,j}$ 表示最右端的一条线段为 $i$ ,上一个线段的结尾的坐标不大于 $j$ 时,$\max(f(x)|x\in [1,m])$ 的最小值 。

  那么,我们对于每一个 $i$ 首先求出所有 上一个线段的结尾的坐标等于 $j$ 时 的 dp 值,然后搞一搞前缀 $\min$ 即可。

  时间复杂度 $O(nm)$ 。

代码

#include <bits/stdc++.h>
using namespace std;
int read(){
int x=0;
char ch=getchar();
while (!isdigit(ch))
ch=getchar();
while (isdigit(ch))
x=(x<<1)+(x<<3)+ch-48,ch=getchar();
return x;
}
const int N=2005;
int n,m,dp[N][N];
struct Segment{
int L,R,w;
}a[N];
bool cmp(Segment a,Segment b){
return a.R<b.R;
}
int main(){
for (int T=read();T;T--){
n=read(),m=read();
for (int i=1;i<=n;i++)
a[i].L=read(),a[i].R=read(),a[i].w=read();
sort(a+1,a+n+1,cmp);
for (int i=0;i<=n;i++)
for (int j=0;j<=m;j++)
dp[i][j]=i==0?0:1e8;
a[0].R=0;
int ans=dp[1][1];
for (int i=1;i<=n;i++){
for (int j=0;j<i;j++){
if (a[j].R+1<a[i].L||a[i].R<=a[j].R)
continue;
int v=dp[j][a[i].L-1];
if (a[j].R>=a[i].L)
v=max(v,a[i].w+a[j].w);
else if (a[j].R+1==a[i].L)
v=max(v,a[i].w);
dp[i][a[j].R]=min(dp[i][a[j].R],v);
}
for (int j=1;j<=m;j++)
dp[i][j]=min(dp[i][j],dp[i][j-1]);
if (a[i].R==m)
ans=min(ans,dp[i][m]);
}
printf("%d\n",ans>=1e8?-1:ans);
}
return 0;
}

  

2018牛客网暑假ACM多校训练赛(第四场)B Interval Revisited 动态规划的更多相关文章

  1. 2018牛客网暑假ACM多校训练赛(第二场)E tree 动态规划

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round2-E.html 题目传送门 - 2018牛客多校赛第二场 E ...

  2. 2018牛客网暑假ACM多校训练赛(第三场)I Expected Size of Random Convex Hull 计算几何,凸包,其他

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round3-I.html 题目传送门 - 2018牛客多校赛第三场 I ...

  3. 2018牛客网暑假ACM多校训练赛(第三场)G Coloring Tree 计数,bfs

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round3-G.html 题目传送门 - 2018牛客多校赛第三场 G ...

  4. 2018牛客网暑假ACM多校训练赛(第三场)D Encrypted String Matching 多项式 FFT

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round3-D.html 题目传送门 - 2018牛客多校赛第三场 D ...

  5. 2018牛客网暑假ACM多校训练赛(第十场)H Rikka with Ants 类欧几里德算法

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round10-H.html 题目传送门 - https://www.n ...

  6. 2018牛客网暑假ACM多校训练赛(第十场)F Rikka with Line Graph 最短路 Floyd

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round10-F.html 题目传送门 - https://www.n ...

  7. 2018牛客网暑假ACM多校训练赛(第十场)D Rikka with Prefix Sum 组合数学

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round10-D.html 题目传送门 - https://www.n ...

  8. 2018牛客网暑假ACM多校训练赛(第八场)H Playing games 博弈 FWT

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round8-H.html 题目传送门 - https://www.no ...

  9. 2018牛客网暑假ACM多校训练赛(第七场)I Tree Subset Diameter 动态规划 长链剖分 线段树

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round7-I.html 题目传送门 -  https://www.n ...

  10. 2018牛客网暑假ACM多校训练赛(第六场)I Team Rocket 线段树

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round6-I.html 题目传送门 - https://www.no ...

随机推荐

  1. Linux与Windows串口通信

    串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛.现在国际上不断有串口新技术及新规格推出,结合社会各方面需要,串口通信发展的空间庞大.串口通讯技术因其自身的优势和 ...

  2. Laravel 5.2问题-----postman进api的post请求,为什么出现Forbidden?

    Forbidden?就纳闷了,有写验证规则的,但是它出现紧张,感觉就是我落了设置什么东西了才会这样? 果不其然, Laravel有个一自动验证的,创建的时候是默认打开的, namespace App\ ...

  3. httprouter与 fasthttp 的性能对比

    关于协议: 本打算接入层使用gRPC,虽然基于HTTP 2.0 效率比较高,而且使用protobuf 能进行高效的序列化.但是本次系统需要和 JAVA进行对接,考虑到gRPC对JAVA的支持性不是很好 ...

  4. 原来商家登录系统的commonjs

    /* *适配 */ //orientationchange方向改变事件 (function (doc,win) { var docEl = doc.documentElement,//根元素html ...

  5. 对象的宽度、top位置,x坐标属性

    DOM对象   DOM对象属性 对应css 说明 读/写 width   obj.clientWidth=20 1. 内联样式 <p style="width:20px"&g ...

  6. JAVA图书管理系统汇总共27个

    好多人都在搜索图书管理系统,感觉这个挺受欢迎的,所以整理了一系列的图书管理系统,让大家选择.java图书馆管理系统[优秀毕业设计论文+源码]http://down.51cto.com/data/683 ...

  7. Oracle 闪回

    Oracle 闪回特性(FLASHBACK DATABASE) 本文来源于:gerainly 的<Oracle 闪回特性(FLASHBACK DATABASE) > -========== ...

  8. Confluence 6 管理协同编辑 - 修改你的 Synchrony 配置

    你不能通过 Confluence UI 修改 Synchrony 的配置.配置的修改是通过系统属性进行修改的.在绝大部分情况下,你不需要对默认的配置进行修改.  修改 Synchrony 运行的端口. ...

  9. Confluence 6 配置站点主页面

     主面板(dashboard)是你站点的默认主页,但是你也可以选择使用一个空间的主页为网站访问的首页面. 针对你的 Confluence 站点主要是为用户进行阅读而不是创建内容的话,这样的配置就显得非 ...

  10. pytorch的学习资源

    安装:https://github.com/pytorch/pytorch 文档:http://pytorch.org/tutorials/beginner/blitz/tensor_tutorial ...