题目http://115.159.40.116/contest_show.php?cid=66#problem/B
其实这个题就是求有多少个子序列;
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node
{
int len;
int wei;
} num[5005];
int cmp(node x,node y)
{
if(x.len==y.len)
return x.wei<y.wei;
else
return x.len<y.len;
}
int main()
{
int q[5005];
memset(q,0,sizeof(q));
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
int i,j;
for(i=0; i<n; i++)
{
scanf("%d%d",&num[i].len,&num[i].wei);
}
sort(num,num+n,cmp);
q[0]=num[0].wei;
int c=1;
for(i=1; i<n; i++)
{
for(j=0; j<c; j++)
{
if(num[i].wei>=q[j])//当下一个数大于上一个数时,更新q[i],和下一数进行比较;
{
q[j]=num[i].wei;//不是在q[0]更新,注意
break;
}
}
if(j>=c)//如果遇到比上一个数小的,开一个新的子序列,c++;
{
q[j]=num[i].wei;
c++;
}
}
printf("%d
",c);
}
return 0;
}