首先,先看题.....(虽然比较简单

3027 线段覆盖 2

 

 时间限制: 1 s
 空间限制: 128000 KB

题目描述 Description

数轴上有n条线段,线段的两端都是整数坐标,坐标范围在0~1000000,每条线段有一个价值,请从n条线段中挑出若干条线段,使得这些线段两两不覆盖(端点可以重合)且线段价值之和最大。

n<=1000

输入描述 Input Description

第一行一个整数n,表示有多少条线段。

接下来n行每行三个整数, ai bi ci,分别代表第i条线段的左端点ai,右端点bi(保证左端点<右端点)和价值ci。

输出描述 Output Description

输出能够获得的最大价值

样例输入 Sample Input

3

1 2 1

2 3 2

1 3 4

样例输出 Sample Output

4

数据范围及提示

数据范围

对于40%的数据,n≤10;

对于100%的数据,n≤1000;

0<=ai,bi<=1000000

0<=ci<=1000000

下面,呈上AC代码,外加详细解析:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4
 5 using namespace std;
 6
 7 const int maxn = 1003;
 8
 9 struct Line{
10     int start;
11     int end;
12     int value;
13 }l[maxn];
14 //确定一个结构体,用结构体定义数组,让其里面存储线段的起点、终点与线段长度
15
16 int dp[maxn];//此数组储存关于n条线段的最大价值
17
18 int cmp(const Line &a ,const Line &b)//用来sort排序
19 {
20     return a.end < b.end;//从小到大排序  返回终点较小的
21 }
22 int main()
23 {
24     int n;
25     scanf("%d",&n);
26     for(int i = 1; i <= n; i++)
27     {
28         int a,b,c;//a,b,c分别为线段起点、终点及长度
29         scanf("%d%d%d", &a, &b, &c);
30         l[i].start = a;
31         l[i].end = b;
32         l[i].value = c;
33         //将每条线段的起点、终点、长度储存进去
34     }
35     sort (l+1, l+n+1,cmp);//将l数组进行从小到大排序(按照左端点进行升序排序)
36     //l为地址,+1、+n+1为数组下标,注意左闭右开
37     for(int i = 1; i <= n; i++)
38     {
39         dp[i] = max (dp[i-1], l[i].value);//首先先进行第一次更新
40         for(int p = i - 1; p >= 1; p--)
41         {
42             if (l[p].end <= l[i].start)//p表示在i左边的那条线段,注意这是一个开区间,所以是"<="
43             dp[i] = max (dp[i], dp[p] + l[i].value);//进行第二次更新
44         }
45     }
46     printf("%d",dp[n]);//输出dp[n]
47     return 0;
48 }

转载于:https://www.cnblogs.com/New-ljx/p/10343913.html

CODEVS 3027 线段覆盖2相关推荐

  1. CodeVS 3027 线段覆盖2(DP)

    题目大意: http://codevs.cn/problem/3027/ 源码: #include <iostream>using namespace std;struct {int x, ...

  2. wikioi 3027 线段覆盖 2

    题目描述 Description 数轴上有n条线段,线段的两端都是整数坐标,坐标范围在0~1000000,每条线段有一个价值,请从n条线段中挑出若干条线段,使得这些线段两两不覆盖(端点可以重合)且线段 ...

  3. [CODEVS 3037] 线段覆盖 5

    描述 数轴上有n条线段,线段的两端都是整数坐标,坐标范围在0~10^18,每条线段有一个价值,请从n条线段中挑出若干条线段,使得这些线段两两不覆盖(端点可以重合)且线段价值之和最大. 分析 提供两种思 ...

  4. 【多题合集】线段覆盖1、2、3

    1214 线段覆盖 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 给定x轴上的N(N<100)条线段,每个线段由它的二 ...

  5. codevs 1082 线段树区间求和

    codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...

  6. ACM公选课第五节贪心4.14-5.4补+第六节上贪心线段覆盖

    每一步都不从全局,找当下就好 特征(还有dp基础) 求解(比如最小生成树那个) 伪代码 就是每个房间的比例都不一样 要靠经验 事件序列问题(dp贪心经典题) 用贪心解,最先结束的,后面选最先结束且不重 ...

  7. P1803 凌乱的yyy / 线段覆盖

    P1803 凌乱的yyy / 线段覆盖 https://www.luogu.org/problemnew/show/P1803 提交 题目提供者 yyy2015c01 嘤嘤嘤 评测方式 云端评测 标签 ...

  8. [Codevs] 1082 线段树练习3

    1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的 ...

  9. 线段覆盖(洛谷P1803题题解,C++语言描述)

    题目要求 P1803题目链接 分析 这题是一个线段覆盖问题,但并不是很复杂,也是贪心思想. 想要尽可能放线段,不能重合(可以正好相交),那就可以每一次只关注右端点,尽可能地选择剩余未选的线段中右端点最 ...

  10. 【codevs30123037】线段覆盖4、5,姗姗来迟

    3012 线段覆盖 4 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 数轴上有n条线段,线段的两端都是整数坐标, ...

最新文章

  1. 发展大数据还有三道坎要迈
  2. matlab 句柄图像尝试
  3. Spring Cloud Sleuth 服务跟踪 将跟踪信息存储到数据库
  4. 希尔伯特曲线的绘制c语言,用四叉树和希尔伯特曲线做空间索引
  5. rpm包时遇到Header V3 DSA signature: NOKEY时解决办法
  6. clickhouse原理解析与应用实践_Hybrid App (混合应用) 技术全解析 方案原理篇
  7. Gym 101102C---Bored Judge(区间最大值)
  8. Hadoop日志分析工具——White Elephant
  9. ul 原点显示_html ul li在div里圆点靠左对齐
  10. Java代码发送POST请求
  11. php获取当前页面select的值,关于JS获取select的值
  12. HTML ajax 上传文件限制文件的类型和文件大小
  13. Thinkphp列表搜索排序-----查
  14. 解析博图数据块(昆仑通态触摸屏自动命名)
  15. 独立院校转设,高考新生何去何从|转设对新生有哪些影响
  16. 运动控制 轨迹规划综述
  17. lstm实战,nlp情感分析(Kaggle)
  18. Python获取局域网IP(ping)
  19. 产品读书《让大象飞:激进创新,让你一飞冲天的创业术》
  20. 75 道 JavaScript 面试题

热门文章

  1. 语录帝——要想人前显贵,必须背地里遭罪
  2. iphone开发常用代码
  3. 谈谈互动型网站中垃圾贴的应对方案,互联网营销
  4. Android的富文本功能
  5. HTML5-canvas标签
  6. 用reloadRowsAtIndexPaths刷新单个cell 跳动问题
  7. xsl判断节点存在_[剑指offer]25删除链表中重复的节点
  8. 控制台输出Security Warning: The negotiated TLS 1.0 is an insecure protocol and is suported for backward c
  9. C#中如何获取一个二维数组的两维长度,即行数和列数?
  10. Linux下nohup、crontab的使用