给定 x 轴上 N(0<N<100)条线段 [ai,bi] i=1,2,……N,端点坐标都是区间(-999,999)内的整数。
请你编写一个程序,从给出的线段中去掉尽量少的线段,使得剩下的线段两两之间没有内部公共点。
所谓的内部公共点是指一个点同时属于两条线段且至少在其中一条线段的内部(即除去端点的部分)。
输入
输入第一行是一个正整数 N,表示线段个数。
接下来有 N 行,第 i 行有两个空格隔开的整数,表示第 i 条线段两个端点的坐标。
输出
输出一个数,表示最多剩下的线段数。
输入样例
3
6 3
1 3
2 5
输出样例
2
一开始的思路是先将线段排好序,从左往右找起。因为当前位置的一条线段有两种可能,一个是与下一条线段没有重叠,那就可以数量直接加1;还有一种是有重叠,这个又可以分为两种情况,一种是舍弃当前这一条,从下一条开始考虑起,一种是不舍弃,往后找到不重叠的那条开始接着考虑。但是超时了,代码如下:
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y;
}line[110];
int cmp(node a,node b)
{
if(a.x==b.x) return a.y>b.y;
return a.x<b.x;
}
int sum=0,n;
void dfs(int i,int ans)
{
if(i==n)
{
sum=max(sum,ans+1);
return;