2018牛客网暑假ACM多校训练赛(第四场)B Interval Revisited 动态规划
原文链接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 动态规划的更多相关文章
- 2018牛客网暑假ACM多校训练赛(第二场)E tree 动态规划
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round2-E.html 题目传送门 - 2018牛客多校赛第二场 E ...
- 2018牛客网暑假ACM多校训练赛(第三场)I Expected Size of Random Convex Hull 计算几何,凸包,其他
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round3-I.html 题目传送门 - 2018牛客多校赛第三场 I ...
- 2018牛客网暑假ACM多校训练赛(第三场)G Coloring Tree 计数,bfs
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round3-G.html 题目传送门 - 2018牛客多校赛第三场 G ...
- 2018牛客网暑假ACM多校训练赛(第三场)D Encrypted String Matching 多项式 FFT
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round3-D.html 题目传送门 - 2018牛客多校赛第三场 D ...
- 2018牛客网暑假ACM多校训练赛(第十场)H Rikka with Ants 类欧几里德算法
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round10-H.html 题目传送门 - https://www.n ...
- 2018牛客网暑假ACM多校训练赛(第十场)F Rikka with Line Graph 最短路 Floyd
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round10-F.html 题目传送门 - https://www.n ...
- 2018牛客网暑假ACM多校训练赛(第十场)D Rikka with Prefix Sum 组合数学
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round10-D.html 题目传送门 - https://www.n ...
- 2018牛客网暑假ACM多校训练赛(第八场)H Playing games 博弈 FWT
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round8-H.html 题目传送门 - https://www.no ...
- 2018牛客网暑假ACM多校训练赛(第七场)I Tree Subset Diameter 动态规划 长链剖分 线段树
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round7-I.html 题目传送门 - https://www.n ...
- 2018牛客网暑假ACM多校训练赛(第六场)I Team Rocket 线段树
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round6-I.html 题目传送门 - https://www.no ...
随机推荐
- springcloud-4:服务注册(hello-service)
服务端 请见 http://www.cnblogs.com/huiy/p/8668005.html 客户端: 主启动类 import org.springframework.boot.SpringAp ...
- 1)requests模块
一:requests 介绍 requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装, 从而使得Pyt ...
- cmder 神器 +curl
cmder 神器 https://www.jianshu.com/p/7a706c0a3411 curl https://www.cnblogs.com/zhuzhenwei918/p/6781314 ...
- C# Excel行高、列宽、合并单元格、单元格边框线、冻结
private _Workbook _workBook = null;private Worksheet _workSheet = null;private Excel.Application _ex ...
- kindeditor用法简单介绍(转)
1,首先去官网下载http://www.kindsoft.net/ 2,解压之后如图所示: 由于本人做的是用的是JSP,所以ASP,PHP什么的就用不上了,直接把那些去掉然后将整个文件夹扔进Myecl ...
- liunx 安装redis 4.0
liunx 上安装redis 4.0.1 第一步:将 redis-4.0.1.tar.gz 压缩问上传至/home目录下 第二步: 解压文件 tar -zxvf redis-4.0.1.tar.g ...
- WebSocket服务端和客户端使用
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net;usi ...
- Confluence 6 配置快捷链接
快捷链接提供了提供了一个在 Confluence 中访问从常用资源的快速方法.当你创建一个快捷链接的时候,你需要为你的快捷链接 URL 指派一个 Key,用户可以在 Confluence 中只输入这个 ...
- Confluence 6 配置一个数据源连接
这个指南指导你如何配置使用 JNDI 数据源来连接到你的数据库.使用这个类型的连接,Confluence 将会询问应用服务器(Tomcat)中你配置的连接信息. 如果你希望使用 JDBC 的数据库连接 ...
- LeetCode(108):将有序数组转换为二叉搜索树
Easy! 题目描述: 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组 ...