问题 3924 --最小区间覆盖(完善程序)

3924: 最小区间覆盖(完善程序)★★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 315  解决: 197
[提交][状态][命题人:]

题目描述

给出n个区间,第i个区间的左右端点是[ai,bi]。现在要在这些区间中选出若干个,使得区间[0,m]被所选区间的并覆盖(即每一个0<=i<=m都在某个所选的区间中)。保证答案存在,求所选区间个数的最小值。

输入第一行包含两个整数n和m(1<=n<=5000,1<=m<=10^9)

接下来n行,每行两个整数ai和bi(0<=ai,bi<=m)

提示:使用贪心法解决这个问题。先用O(n^2)的时间复杂度排序,然后贪心选择这些区间。

#include<iostream>

using namespace std;

const int MAXN=5000;
int n,m;
struct segment{int a,b;} A[MAXN];

void sort()//排序
{
	for(int i=0;i<n;i++) 
		for(int j=1;j<n;j++)
		if(____(1)____)
		{
			segment t=A[j];
			_____(2)_____;
		}
} 

int main()
{
	cin>>n>>m;
	for(int i=0;i<n;i++)
		cin>>A[i].a>>A[i].b;
	sort();
	int p=1;
	for(int i=1;i<n;i++)
		if(_____(3)_____)
				A[p++]=A[i];
		
	n=p;
	int ans=0,r=0;
	int q=0;
	while(r<m)
	{
		while(_____(4)____)
			q++;
		________(5)______;
		ans++;
	}
	cout<<ans<<endl;
	return 0;	
}

输入

输出

样例输入
Copy
6 15
1 5
4 8
7 13
0 4
11 15
3 4
样例输出
Copy
4

提示

来源

[提交][状态]