套娃游戏大家一定玩过,套娃在嵌套放入的时候,每一个套娃只可以嵌入高度和长度均比它大的套娃内。 现在有一批套娃,给出它们的高度和长度,计算最少能嵌套出几组套娃。
第一行为正整数t(≤5),表示数据组数; 每组数据中,第一行为正整数m(≤30000),表示一共有m只套娃; 接下来m行,每行两个正整数wi和hi(wi,hi≤105),分别表示每一只套娃的高度和长度。
一共能组成多少套套娃
2 4 20 30 10 10 30 20 40 50 3 10 30 20 20 30 10
2 3
1 6 10 4 10 3 10 2 20 6 20 5 30 3
3
#include<bits/stdc++.h>
using namespace std;
int t,n,sum,x;
struct s{
int h,k;
}a[30005],b[30005];
bool cmp(s a,s b){
if(a.h!=b.h)return a.h<b.h;
else return a.k<b.k;
}
int main()
{
//freopen("game.in","r",stdin);
//freopen("game.out","w",stdout);
cin>>t;
for (int i=1;i<=t;i++){
sum=1,x=0;
cin>>n;
for (int j=1;j<=n;j++)cin>>a[j].h>>a[j].k;
sort(a+1,a+1+n,cmp);
b[1].h=a[1].h,b[1].k=a[1].k;
for (int j=2;j<=n;j++){
for (int z=1;z<=sum;z++){
if(a[j].h>b[z].h && a[j].k>b[z].k)x=1,b[z].h=a[j].h,b[z].k=a[j].k;
}
if(x==0)sum++,b[sum].h=a[j].h,b[sum].k=a[j].k;
}
cout<<sum<<endl;
}
return 0;
}