8602 区间相交问题(贪心)

来源:互联网 发布:知乎怎么公共编辑问题 编辑:程序博客网 时间:2024/05/23 02:04

8602 区间相交问题

时间限制:1000MS  内存限制:1000K
提交次数:1966 通过次数:468 

题型: 编程题   语言: C++;C;VC;JAVA

Description

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


输入格式

第一行一个正整数n(n<=50),表示闭区间数。接下来n行中,每行2个整数,表示闭区间的2个整数端点。


输出格式

输出去掉的最少的闭区间数。


输入样例

3
10 20
10 15
12 15


输出样例

2


提示

这个问题基本等同于书本的活动安排问题。


作者

zhengchan


我的实现代码:

#include <iostream>#include <math.h>using namespace std;/*测试数据:310 2010 1512 15*/class Position{    public:    int start;    int end;};int main() {    int n;    cin >> n;    Position a[n];    for(int i = 0; i < n; i++){        cin >> a[i].start;        cin >> a[i].end;    }    int count = 1;// 统计留下来的区间数    int cur = 0;// 目前不相交的区间行号    Position temp;    // 排序    for(int i = 0; i<n-1; i++){        for(int j = i+1; j<n; j++){            if(a[i].end > a[j].end){                temp = a[i];                a[i] = a[j];                a[j] = temp;            }        }    }    for(int i = 0; i<n; i++){        // 当前end 与 第i的start比较        if(a[cur].end <= a[i].start){            count++;// 留下的区间数+1            cur = i;        }    }    cout << n - count << endl;    return 0;}



0 0
原创粉丝点击