记录编号 575606 评测结果 AAAAAAAAAA
题目名称 嵌套矩形 最终得分 100
用户昵称 Gravatar┭┮﹏┭┮ 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2022-09-22 21:31:28 内存使用 0.00 MiB
显示代码纯文本
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N = 1010;
  4. int n,f[N],nx[N];
  5. vector<int>q[N];
  6. struct made{
  7. int x,y,b;
  8. }a[N];
  9. bool cmp(made x,made y){
  10. if(x.x == y.x)return x.y < y.y;
  11. return x.x < y.x;
  12. }
  13. void init(){
  14. //输入,以宽为x,长为y
  15. scanf("%d",&n);
  16. for(int i = 1;i <= n;i++){
  17. int x,y;
  18. scanf("%d%d",&x,&y);
  19. a[i].x = min(x,y),a[i].y = max(x,y);
  20. a[i].b = i;
  21. }
  22. //排序优化
  23. sort(a+1,a+1+n,cmp);
  24. }
  25. int sou(int x,int s){
  26. //没有包括它的就返回
  27. if(q[x].size() == 0){
  28. f[x] = 1;
  29. return 1;
  30. }
  31. //ma为最大的长度,st为ma长度的初始下标
  32. int ma = 1,st = x;
  33. //遍历每一条出边
  34. for(int i = 0;i < q[x].size();i++){
  35. int ss = 0;
  36. if(f[q[x][i]])ss = f[q[x][i]]+1;//记忆化
  37. else ss = sou(q[x][i],s+1)+1;
  38. //字典序
  39. if(ss > ma){
  40. ma = ss;
  41. st = q[x][i];
  42. }
  43. else if(ss == ma && a[q[x][i]].b < a[st].b){
  44. st = q[x][i];
  45. }
  46. }
  47. nx[x] = st;//字典序
  48. f[x] = ma;//记忆化
  49. return ma;
  50. }
  51. void build() {
  52. //建图
  53. for(int i = 1;i <= n;i++){
  54. for(int j = i+1;j <= n;j++){
  55. if(a[i].x < a[j].x && a[i].y < a[j].y) {
  56. q[i].push_back(j);
  57. }
  58. }
  59. }
  60. }
  61. void dfs(){
  62. //枚举每个初始包括点,倒序保证记忆化
  63. //ma为最大的长度,st为ma长度的初始下标
  64. int ma = 1,st = n;
  65. for(int i = n;i >= 1;i--){
  66. int ss = sou(i,1);
  67. //字典序
  68. if(ss > ma){
  69. ma = ss;st = i;
  70. }
  71. else if(ss == ma && a[i].b < a[st].b){
  72. st = i;
  73. }
  74. }
  75. printf("%d\n",ma);
  76. //字典序,因为排序所以输出a[x].b,st存的是排序过后的下标,要转化为排序前下标
  77. cout<<a[st].b;
  78. while(nx[st] != 0){
  79. cout<<' '<<a[nx[st]].b;
  80. st = nx[st];
  81. }
  82. printf("\n");
  83. }
  84. int main(){
  85. freopen("qiantao.in","r",stdin);
  86. freopen("qiantao.out","w",stdout);
  87. init();
  88. build();
  89. dfs();
  90. return 0;
  91. }
  92.