贪心吧
保证一维非递减的情况下,计算另一维上最少有几个非递减序列,就是答案
1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 using namespace std; 5 int t,n; 6 struct P{ 7 int l,w; 8 }s[5005]; 9 bool cmp(P a,P b) 10 { 11 return a.l==b.l?a.w<b.w : a.l<b.l; 12 } 13 int ans[5005]; 14 int main() 15 { 16 scanf("%d",&t); 17 while(t--) 18 { 19 scanf("%d",&n); 20 for(int i=0;i<n;i++) scanf("%d%d",&s[i].l,&s[i].w); 21 sort(s,s+n,cmp); 22 ans[0]=0; 23 int cnt=0; 24 for(int i=0;i<n;i++) 25 { 26 bool flag=0; 27 for(int j=0;j<cnt;j++) 28 { 29 if(ans[j]<=s[i].w) 30 { 31 ans[j]=s[i].w; 32 flag=1; 33 break; 34 } 35 } 36 if(!flag) 37 { 38 ans[cnt++]=s[i].w; 39 } 40 } 41 cout<<cnt<<endl; 42 } 43 }