记录编号 595640 评测结果 AAAAAAAAAA
题目名称 嵌套矩形 最终得分 100
用户昵称 Gravatarqyd 是否通过 通过
代码语言 C++ 运行时间 0.114 s
提交时间 2024-10-15 16:30:59 内存使用 7.25 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int maxn=1010;
int n;
int d[maxn];
struct matrix{
	int x,y;
}a[maxn];
int d_edge[maxn][maxn];
void build(int u,int v){
	if((a[u].x>a[v].x&&a[u].y>a[v].y)||(a[u].x>a[v].y&&a[u].y>a[v].x)){d_edge[v][u]=1;return ;}
	//which means u can cover v;
	if((a[u].x<a[v].x&&a[u].y<a[v].y)||(a[u].x<a[v].y&&a[u].y<a[v].x)){d_edge[u][v]=1;return ;}
	//which means u could be covered by v;
	return ;
}
int dp(int i){
	int &ans=d[i];
	if(ans>0)return ans;
	ans=1;
	for(int j=1;j<=n;j++)
	  if(d_edge[i][j])
	    ans=max(ans,dp(j)+1);
	return ans;
}
void print_ans(int i){
	cout<<i<<" ";
	for(int j=1;j<=n;j++)
	  if(d_edge[i][j]&&d[i]==d[j]+1)
	    {print_ans(j);break;}
}
int main()
{
	freopen("qiantao.in","r",stdin);
	freopen("qiantao.out","w",stdout);
	cin>>n;
	memset(d,0,sizeof(d));
	memset(d_edge,0,sizeof(d_edge));
	for(int i=1;i<=n;i++)
	{
		cin>>a[i].x>>a[i].y;
		for(int j=1;j<i;j++)
		  build(i,j);
	}
	int maxd=-1,id;
	for(int i=1;i<=n;i++)
	{
		d[i]=dp(i);
		if(d[i]>maxd)
		{
			maxd=d[i];
			id=i;
		}
	}
	cout<<maxd<<endl;
	print_ans(id);
	return 0;	
}