1. 程式人生 > >zcmu--1615: 找區間(貪心)

zcmu--1615: 找區間(貪心)

1615: 找區間

Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 291  Solved: 122 [Submit][Status][Web Board]

Description

在X軸上有n個閉區間,去掉儘可能少的區間使剩下的區間都不相交

Input

多組測試資料

第一行輸入n(n<=1000)

接下來n行每行兩個數a,b代表閉區間的兩個端點。

(a,b<=1000000)

Output

輸出最小的刪除的區間數

Sample Input

3

10 20

15 10

20 15

Sample Output

2

【分析】貪心演算法--選擇不相交區間問題

【思路】首先按照區間的結束位置升序排序,一次考慮各個區間。如果沒有和已經選擇的區間衝突就選。

【程式碼】

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=1e3+5;
struct node{
	int l,r;
}a[maxn];
bool cmp(node x,node y)
{
	return x.r<y.r;
}
int main()
{
	int n;
	while(~scanf("%d",&n))
	{
		for(int i=0;i<n;i++)
		{
			int x,y;
			scanf("%d%d",&x,&y);
			if(x>y)swap(x,y);
			a[i].l=x,a[i].r=y;
		}	
		sort(a,a+n,cmp);
	//	for(int i=0;i<n;i++)cout<<a[i].l<<","<<a[i].r<<endl;
		int cnt=1,t=a[0].r;
		for(int i=1;i<n;i++)
		{
			if(a[i].l>t)
			{
				cnt++;
				t=a[i].r;
			}
		}
		cout<<n-cnt<<endl;
	}
}