简单贪心,排序后一遍一遍筛就行了
原帖地址:http://blog.csdn.net/ice_crazy/article/details/7597112
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
struct N
{
int l,w,f;//f初始为0,表示没有访问过
};
bool cmp(N a,N b)
{
if(a.l!=b.l) return a.l<b.l;
else return a.w<b.w;
}
int main()
{
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
int t,n;
N s[5010];
cin>>t;
while(t--)
{
cin>>n;
int i,j,len,wei,ans=0;
for(i=0;i<n;i++)
{
cin>>s[i].l>>s[i].w; s[i].f=0;
}
sort(s,s+n,cmp);
for(i=0;i<n;i++)
{
if(s[i].f) continue;
ans++;
len=s[i].l; wei=s[i].w;
for(j=i+1;j<n;j++)
if(s[j].f==0 && s[j].l>=len && s[j].w>=wei)
{
s[j].f=1; len=s[j].l; wei=s[j].w;
}
}
cout<<ans<<endl;
}
return 0;
}