描述
上数学课时,老师给了LYH一些闭区间,让他取尽量少的点,使得每个闭区间内至少有一个点。但是这几天LYH太忙了,你们帮帮他吗?
-
输入
-
多组测试数据。
每组数据先输入一个N,表示有N个闭区间(N≤100)。
接下来N行,每行输入两个数a,b(0≤a≤b≤100),表示区间的两个端点。
输出
- 输出一个整数,表示最少需要找几个点。 样例输入
-
4 1 5 2 4 1 4 2 3 3 1 2 3 4 5 6 1 2 2
样例输出
-
1 3
1
-
-
-
**贪心,最佳策略按结束点的位置排序;当下一个点的起始点小于当前的结束点,继续直达出现下一个新的起始点,把当前的结束位置赋值
-
-
#include <iostream>
#include <algorithm>
using namespace std;
struct Node
{
int beg;
int end;
};
int cmp(Node a,Node b)
{
return a.end<b.end;
}
int main()
{
int n;
while(cin>>n)
{
Node N[n];
for(int i=0;i<n;i++)
{
cin>>N[i].beg>>N[i].end;
}
sort(N,N+n,cmp);
Node pre=N[0];
int count = 1;
for(int i=1;i<n;i++)
{
if(N[i].beg<=pre.end)
continue;
else if(N[i].beg>pre.end)
{
pre = N[i];
count++;
}
}
cout<<count<<endl;
}
return 0;
}