嵌套矩形
其实就是最大子序列的变形,首先排序;
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 }
浙公网安备 33010602011771号