题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=16
代码如下:
01.
#include<cstdio>
02.
#include<cstring>
03.
#include<algorithm>
04.
using
namespace
std;
05.
06.
struct
re
07.
{
08.
int
x;
09.
int
y;
10.
}R[1010];
11.
bool
cmp(re a,re b)
12.
{
13.
if
(a.x!=b.x)
14.
return
a.x<b.x;
15.
else
16.
return
a.y<b.y;
17.
}
18.
int
main()
19.
{
20.
int
icase;
21.
scanf
(
"%d"
,&icase);
22.
while
(icase--)
23.
{
24.
int
n;
25.
int
a,b;
26.
int
dp[1010];
27.
scanf
(
"%d"
,&n);
28.
for
(
int
i=0;i<n;i++)
29.
{
30.
scanf
(
"%d%d"
,&a,&b);
31.
R[i].x=max(a,b);
32.
R[i].y=min(a,b);
33.
}
34.
sort(R,R+n,cmp);
35.
for
(
int
i=0;i<n;i++)
36.
dp[i]=1;
37.
for
(
int
i=0;i<n;i++)
38.
for
(
int
j=i;j<n;j++)
39.
{
40.
if
(R[i].x<R[j].x&&R[i].y<R[j].y)
41.
dp[j]=max(dp[j],dp[i]+1);
42.
}
43.
int
Max=dp[0];
44.
for
(
int
i=1;i<n;i++)
45.
{
46.
if
(dp[i]>Max)
47.
Max=dp[i];
48.
}
49.
printf
(
"%d\n"
,Max);
50.
}
51.
return
0;
52.
}