记录编号 595640 评测结果 AAAAAAAAAA
题目名称 嵌套矩形 最终得分 100
用户昵称 Gravatarqyd 是否通过 通过
代码语言 C++ 运行时间 0.114 s
提交时间 2024-10-15 16:30:59 内存使用 7.25 MiB
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn=1010;
  4. int n;
  5. int d[maxn];
  6. struct matrix{
  7. int x,y;
  8. }a[maxn];
  9. int d_edge[maxn][maxn];
  10. void build(int u,int v){
  11. 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 ;}
  12. //which means u can cover v;
  13. 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 ;}
  14. //which means u could be covered by v;
  15. return ;
  16. }
  17. int dp(int i){
  18. int &ans=d[i];
  19. if(ans>0)return ans;
  20. ans=1;
  21. for(int j=1;j<=n;j++)
  22. if(d_edge[i][j])
  23. ans=max(ans,dp(j)+1);
  24. return ans;
  25. }
  26. void print_ans(int i){
  27. cout<<i<<" ";
  28. for(int j=1;j<=n;j++)
  29. if(d_edge[i][j]&&d[i]==d[j]+1)
  30. {print_ans(j);break;}
  31. }
  32. int main()
  33. {
  34. freopen("qiantao.in","r",stdin);
  35. freopen("qiantao.out","w",stdout);
  36. cin>>n;
  37. memset(d,0,sizeof(d));
  38. memset(d_edge,0,sizeof(d_edge));
  39. for(int i=1;i<=n;i++)
  40. {
  41. cin>>a[i].x>>a[i].y;
  42. for(int j=1;j<i;j++)
  43. build(i,j);
  44. }
  45. int maxd=-1,id;
  46. for(int i=1;i<=n;i++)
  47. {
  48. d[i]=dp(i);
  49. if(d[i]>maxd)
  50. {
  51. maxd=d[i];
  52. id=i;
  53. }
  54. }
  55. cout<<maxd<<endl;
  56. print_ans(id);
  57. return 0;
  58. }