问题描述:数轴上有n个闭区间[ai, bi]。取尽量少的点,使得每个区间内都至少含有一个点(不同区间内含的点可以是同一个)
分析:区间包含,小区间满足则大区间也一定满足,步骤和选择不相交区间相似,先对bi进行非上升排序,如果bi相等则保持ai从大到小排序(大区间包含)。从第一个区间开始,取最后一个点,因为取最后一个点可以笼罩的区域最多。然后思路同不相交区间,循环,若后一个区间的起始部分大于前一个满足区间的结束部分,则该区间的结束部分为后一个点的位置。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1010;
struct demo1
{
int b, e;
};
demo1 demo[maxn];
bool cmp(demo1 a, demo1 b)
{
return a.e < b.e || a.e < b.e && a.b > b.b;
}
int main()
{
int t;
while(cin >> t)
{
int n;
while(cin >> n && n != 0)
{
int lastend, sum = 0;
for(int i = 0; i < n; i++)
{
scanf("%d%d", &demo[i].b, &demo[i].e);
if(demo[i].b > dem