悬关求调
  • 板块灌水区
  • 楼主youyou09
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/3 18:31
  • 上次更新2024/10/3 20:32:08
查看原帖
悬关求调
1381402
youyou09楼主2024/10/3 18:31

悬关求调

描述

套娃游戏大家一定玩过,套娃在嵌套放入的时候,每一个套娃只可以嵌入高度和长度均比它大的套娃内。 现在有一批套娃,给出它们的高度和长度,计算最少能嵌套出几组套娃。

输入描述

第一行为正整数t(≤5),表示数据组数; 每组数据中,第一行为正整数m(≤30000),表示一共有m只套娃; 接下来m行,每行两个正整数wi和hi(wi,hi≤105),分别表示每一只套娃的高度和长度。

输出描述

一共能组成多少套套娃

用例输入 1

2 4 20 30 10 10 30 20 40 50 3 10 30 20 20 30 10

用例输出 1

2 3

用例输入 2

1 6 10 4 10 3 10 2 20 6 20 5 30 3

用例输出 2

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;
}

感谢,求关

2024/10/3 18:31
加载中...