首页 > 其他 > 详细

1.区间选点 区间问题

时间:2020-08-21 15:04:30      阅读:61      评论:0      收藏:0      [点我收藏+]

技术分享图片

 技术分享图片

区间问题一般都需要对区间进行排序,对左端点排序,或对右端点排序,或双关键字排序

技术分享图片

 然后需要证明这样的选法选出来的点数一定是符合答案的,且是选点最少的

技术分享图片

 首先按照这个方法来选的话,每一个区间上一定选了一个点,所以这种选法是一种合法的方案

然后这道题的最优解是指所有合法方案中的选点最少的,所以

技术分享图片

 技术分享图片

 技术分享图片

 所以ans = cnt

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N = 100010;
 4 struct Range {
 5     int l, r;
 6 } range[N];
 7 bool cmp(Range r1, Range r2) {
 8     return r1.r < r2.r;
 9 }
10 int main() {
11     int n;
12     cin >> n;
13     for (int i = 0; i < n; i++) {
14         int l, r;
15         cin >> l >> r;
16         range[i] = {l, r};
17     }
18     sort(range, range + n, cmp);
19     int res = 0, ed = -2e9;
20     //ed表示上一个点的下标
21     for (int i = 0; i < n; i++) {
22         if (range[i].l > ed) {
23             res++;
24             ed = range[i].r;
25         }
26     }
27     cout << res << endl;
28     return 0;
29 }

 

1.区间选点 区间问题

原文:https://www.cnblogs.com/fx1998/p/13459032.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!