记录编号 156806 评测结果 AAAAAAAAAA
题目名称 嵌套矩形 最终得分 100
用户昵称 Gravatar残镖书生 是否通过 通过
代码语言 C++ 运行时间 0.044 s
提交时间 2015-04-06 15:15:36 内存使用 4.16 MiB
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int x[1005],y[1005];
int d[1005]; 
int n;
int g[1005][1005];
int dp(int a)
{
	int &ans=d[a];
	if(ans>0)
	return ans;
	ans=1;
	for(int j=1;j<=n;++j)
	if(g[a][j])
	ans=max(ans,dp(j)+1);
	return ans;
}
void p(int a)
{
	printf("%d ",a);
	for(int j=1;j<=n;++j)
	if(g[a][j]&&d[a]==d[j]+1)
	{
		p(j);
		break;
	}
}
int main()
{
	//freopen("in.txt","r",stdin);
	//freopen("out.txt","w",stdout);
	freopen("qiantao.in","r",stdin);
	freopen("qiantao.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
	{
		scanf("%d%d",&x[i],&y[i]);
	}
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=n;++j)
		if(i!=j)
		{
			if((x[i]<x[j]&&y[i]<y[j])||(x[i]<y[j]&&y[i]<x[j]))
			g[i][j]=1;//g表示前面的包含了后面的 
		}
	}
	
	
	int ann;
	int an=-1;
	for(int i=1;i<=n;++i)
	{
		dp(i);
		if(d[i]>an)
		{
			an=d[i];
			ann=i;
		}
    }
    printf("%d\n",an);
    p(ann);
    
}