`
lovnet
  • 浏览: 6706121 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

选择不相交区间(贪心)

 
阅读更多

数轴上有n个区间[ai,bi],要求选择尽量多个区间,使得这些区间两两没有公共点。

贪心策略:

按照b1<=b2<=b3…的方式排序,然后从前向后遍历,每当遇到可以加入集合的区间,就把它加入集合。(集合代表解的集合)

证明:

我们对a1,a2……的关系分以下几种情况考虑:

1、a1>a2。 此时区间2包含区间1。这种情况下显然不会选择区间2,因为选择区间1会留下更多的剩余空间。

不仅区间2如此,以后所有区间中只要有一个 i 满足a1 > ai,i 都不要选。

即此种情况下,选择区间1是明智的,与策略一致。

2、排除情况1后,一定有a1<=a2<=a3……。


在此条件下,如图所示,不论区间1、2的相对位置如何,选择区间1都会为以后的选择留下更大的剩余空间。

从而在此种情况下, 因此选择区间1也是明智的,与策略一致。

经典例题:活动安排问题->http://acm.nyist.net/JudgeOnline/problem.php?pid=14

附代码。

#include <stdio.h>
#include <algorithm>
using namespace std;
struct Extent
{
    int a,b;
    bool operator < (const Extent& S)const
    {
        return b < S.b;
    }
}A[10002];
int main()
{
    int z,n,cnt,end;
    scanf("%d",&z);
    while(z--)
    {
        cnt = 0;
        end = -1;
        scanf("%d",&n);
        for(int i=0;i<n;i++)
            scanf("%d%d",&A[i].a,&A[i].b);
        sort(A,A+n);
        for(int i=0;i<n;i++)
        {
            if(end < A[i].a)
            {
                end = A[i].b;
                cnt++;
            }
        }
        printf("%d\n",cnt);
    }
	return 0;
}




分享到:
评论

相关推荐

    8602区间相交问题

    给定x轴上n个闭区间,去掉尽可能少的闭区间,使剩下的闭区间都不相交。 注意:这里,若区间与另一区间之间仅有端点是相同的,不算做区间相交。例如,[1,2]和[2,3]算是不相交区间。

    贪心算法区间包含

    已知 n 个左闭右开区间 [ a , b) ,对其进行 m 次询问,求区间 [ l , r ] 最多可以包含 n 个区间中的多少个区间,并且被包含的所有区间都不相交。 用于贪心算法对区间包含问题的解决

    贪心思想的区间覆盖问题

    情形1:区间完全覆盖问题 情形2:最大不相交区间数问题 情形3:区间选点问题

    C++ 贪心算法的 5 大问题模板与解析

    - 选择不相交区间问题 & - 区间覆盖问题 & - 区间选点问题 & - 流水作业调度问题 & - 带期限和罚款的单位时间任务调度问题 五大贪心问题模板与解析。 适合人群: 普及晚期或提高早期的萌新 OIer 们。 ...

    贪心算法解决活动安排问题和背包问题

    若区间[si, fi]与区间[sj, fj]不相交,则称活动i与活动j是相容的。也就是说,当si≥fj或sj≥fi时,活动i与活动j相容。活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,是可以用贪心算法有效求解的很...

    会场安排问题(贪心法)

    设有n个会议的集合C={1,2,…,n},其中每个会议都...如果[bi, ei)与[bj , ej)不相交,则称会议i与会议j是相容的。会场安排问题要求在所给的会议集合中选出最大的相容活动子集,也即尽可能地选择更多的会议来使用资源。

    leetcode

    去做 51 NQueens(硬) 126单词阶梯II(困难) ...若两个指针指向相同的变量,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的区域即为当前的窗口),经常用于区间搜索。 若两个指针指向相同的副本,但是

    算法导论中文版

    第21章 用于不相交集合的数据结构  21.1 不相交集合的操作  21.2 不相交集合的链表表示  21.3 不相交集合森林  *21.4 带路径压缩的按秩合并的分析  思考题  本章注记 第六部分 图算法 第22章 基本的图...

    javalruleetcode-magician:java学习

    java lru leetcode ##Thinking in Java chapter21 ...不相交集合 ##leetcode [Distinct Subsequences] () [Rotate Image] () [Ugly Number] () [Ugly Number II] () [Repeated DNA Sequences] () [Lar

    算法导论(part1)

    ·在第21.4节中,我们换掉了对不相交-集合-并(disjoint-set-union)数据结构运行时间的证明,代之以利用潜势方法(potential method)导出一个紧致界的证明。 ·在第22.5节中,对强连通子图算法正确性的证明更简单、...

    算法导论(part2)

    ·在第21.4节中,我们换掉了对不相交-集合-并(disjoint-set-union)数据结构运行时间的证明,代之以利用潜势方法(potential method)导出一个紧致界的证明。 ·在第22.5节中,对强连通子图算法正确性的证明更简单、...

    常用算法代码

    | 最少找硬币问题(贪心策略-深搜实现) 23 | 棋盘分割 23 | 汉诺塔 23 | STL 中的 PRIORITY_QUEUE 24 | 堆栈 24 | 区间最大频率 24 | 取第 K 个元素 25 | 归并排序求逆序数 25 | 逆序数推排列数 25 | 二分...

Global site tag (gtag.js) - Google Analytics