http://acm.nyist.net/JudgeOnline/problem.php?pid=16
经典嵌套矩形问题
拍完序后和最长上升子序列问题很像
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
struct V
{
double x, y;
};
const int MAXN = 1000 + 9;
V a[MAXN];
int dp[MAXN];
bool comp(V a, V b)
{
return a.x < b.x || (a.x == b.x && a.y < b.y);
}
void solve()
{
int n;
scanf("%d", &n);
memset(dp, 0, sizeof(dp));
memset(a, 0, sizeof(a));
for (int i = 0; i < n; i++) {
scanf("%lf%lf", &a[i].x, &a[i].y);
if (a[i].x > a[i].y) swap(a[i].x, a[i].y);
}
sort(a, a + n, comp);
int ans = 1;
dp[0] = 1;
for (int i = 0; i < n; i++) {
int maxdp = 0;
for (int j = 0; j < i; j++) {
if (a[i].x > a[j].x && a[i].y > a[j].y && maxdp < dp[j]) {
maxdp = dp[j];
}
dp[i] = maxdp + 1;
ans = max(ans, dp[i]);
}
}
printf("%d\n", ans);
}
int main()
{
//freopen("in.txt", "r", stdin);
int t;
scanf("%d", &t);
while (t--) {
solve();
}
}