简单贪心。
将所给数据从小到大进行排序,将所给零件的两数据均小于另一个零件的两数据,看做一个集合。
最后输出集合个数。
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct www
{
int x,y;
}s[5005];
int yy[5005],a,b;
bool cmp(www q,www u)
{
if(q.x==u.x)
return q.y<u.y;
else
return q.x<u.x;
}
void show(int o)
{
int j,d,e;
d=s[o].x;
e=s[o].y;
for(j=o+1;j<b;j++)
{
if(!yy[j])
{
if(d<=s[j].x&&e<=s[j].y)
{
yy[j]=1;
d=s[j].x;
e=s[j].y;
}
}
}
}
int main()
{
int c,i,sum;
scanf("%d",&a);
while(a--)
{
scanf("%d",&b);
sum=0;
memset(yy,0,sizeof(yy));
for(i=0;i<b;i++)
{
scanf("%d %d",&s[i].x,&s[i].y);
}
sort(s,s+b,cmp);
for(i=0;i<b;i++)
{
if(yy[i]==0)
{yy[i]=1;
show(i);
sum++;}
}
printf("%d\n",sum);
}
return 0;
}