/*2008 16:51:03 Accepted 1025 C++ 00:00.37 900K 天将降大任于我
看了其他人的解题报告说是导弹拦截问题,但是我搜又搜不到这方面的知识
下面是用dp动态规划做的,先对长度x排序,x相等则对重量y排序,再用动态规划法
*/
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int x,y;
}td[5001];
inline bool operator<(const node a,const node b) //重载的<是作为sort的判断条件的
{
return ((a.x<b.x)||(a.x==b.x&&a.y<b.y));
}
int max(int c,int d)
{
return c>d?c:d;
}
int f[5001];
int n;
int ans;
void work()
{
ans=0;
for(int i=0;i<n;i++)
{
f[i]=0;
for(int j=0;j<i;j++)
if(td[j].x<td[i].x&&td[j].y>td[i].y)
f[i]=max(f[i],f[j]); //发现不符顺序则在原来最大的逆序中增加1
f[i]++;
ans=max(ans,f[i]); //最后取逆序最多的
}
}
int main()
{
int T;cin>>T;
for(int r=1;r<=T;r++)
{
cin>>n;
for(int i=0;i<n;i++)
cin>>td[i].x>>td[i].y;
sort(td,td+n);
work();
cout<<ans<<endl;
}
return 0;
}
心难泰,世风坏,旧时正气今何在?正义寡,人情薄,闻道虽多,茅塞不开。怪!怪!怪!
空等待,几多载,冲出重围人心快!暴雨打,狂风袭,任他折磨,此志难改。耐!耐!耐!