题目链接:计蒜客 T1408 矩形嵌套
题目大意:
题解:
按宽对矩形从小到大排序,宽相等的矩形长更大的在前面,再对矩形的长计算最长升。
#include <algorithm>
#include <iostream>
using namespace std;
int dp[1010], len, n, t;
struct Node {
int l, w;
bool operator<(const Node &obj) const {
if (l == obj.l) {
return w > obj.w;
}
return l < obj.l;
}
} a[1010];
int main() {
cin >> t;
while (t--) {
len = 0;
cin >> n;
for (int i = 1, x, y; i <= n; ++i) {
cin >> x >> y;
a[i].l = max(x, y);
a[i].w = min(x, y);
}
sort(a + 1, a + n + 1);
dp[++len] = a[1].w;
for (int i = 2; i <= n; ++i) {
if (dp[len] < a[i].w) {
dp[++len] = a[i].w;
} else {
int p = lower_bound(dp + 1, dp + len + 1, a[i].w) - dp;
dp[p] = a[i].w;
}
}
cout << len << endl;
}
return 0;
}