排序+贪心。
先对L从小到大进行排序,L一样的W小的在前面,之后就不用看L了。
对W进行贪心处理即可得到答案。
#include<cstdio> #include<cstring> #include<cmath> #include<queue> #include<algorithm> using namespace std; const int maxn=5000+10; struct X { int L,W; } s[maxn]; int n; bool flag[maxn]; bool cmp(const X&a,const X&b) { if(a.L==b.L) return a.W<b.W; return a.L<b.L; } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1; i<=n; i++) scanf("%d%d",&s[i].L,&s[i].W); sort(s+1,s+1+n,cmp); memset(flag,0,sizeof flag); int ans=0; for(int i=1; i<=n; i++) { if(flag[i]==0) { flag[i]=1; ans++; int lim=s[i].W; for(int j=i+1; j<=n; j++) { if(flag[j]==0&&s[j].W>=lim) { lim=s[j].W; flag[j]=1; } } } } printf("%d ",ans); } return 0; }