嵌套矩形

其实就是最大子序列的变形,首先排序;

 1 #include <stdio.h>
 2 #include <algorithm>
 3 
 4 using namespace std;
 5 
 6 struct re
 7 {
 8     int a;//
 9     int b;//
10     int c;//计数器
11 };
12 
13 re r[1001];
14 
15 bool cmp(re t1, re t2)
16 {
17     return t1.a < t2.a;
18 }
19 
20 int main()
21 {
22     int n;
23     scanf("%d", &n);
24     while (n--)
25     {
26         int t, a, b, k, i, j;
27         scanf("%d", &k);
28         for (i = 0; i < k; i++)
29         {
30             scanf("%d %d", &a, &b);
31             if (a < b)
32             {
33                 t = a;
34                 a = b;
35                 b = t;
36             }
37             r[i].a = a, r[i].b = b;
38         }
39         sort(r, r + k, cmp);
40         for (i = 0; i < k; i++)
41             r[i].c = 1;
42         int max = 0, d = 0;
43         for (i = 0; i < k; i++) //这里与子序列的算法类似复杂度o(n^2)
44         {
45             for (j = 0; j < i; j++)
46             {
47                 if ((r[j].a < r[i].a && r[j].b < r[i].b) || (r[j].a < r[i].b && r[j].b < r[i].a))
48                 {
49                     if (max < r[j].c)
50                         max = r[j].c;
51                 }
52             }
53             r[i].c += max;
54             if (d < r[i].c)
55                 d = r[i].c;
56             max = 0;
57         }
58         printf("%d\n", d);
59     }
60     
61     
62     
63     return 0;
64 }

posted on 2012-08-09 09:45  Xor<>OR  阅读(308)  评论(0)    收藏  举报

导航