简单贪心。
将所给数据从小到大进行排序,将所给零件的两数据均小于还有一个零件的两数据,看做一个集合。
最后输出集合个数。
#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 ",sum); } return 0; }