原文链接:https://www.luogu.com.cn/problem/P1233
AC代码:
#include<iostream>
#include<vector>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
int n,dp[5005],ans=0;
typedef struct node{
int L,W;
}node;
node nod,nodd;
vector<node> vec;
int cmp(const node &a,const node &b){
if(a.W!=b.W) return a.W>b.W;
else return a.L>b.L;
}
void deal(){
int i,j;
memset(dp,0,sizeof(dp));
for(i=1;i<vec.size();i++){
nod=vec[i];
for(j=i-1;j>=0;j--){
if(vec[j].L<vec[i].L||vec[j].W<vec[i].W){
dp[i]=max(dp[i],dp[j]+1);
}
}
ans=max(ans,dp[i]);
}
}
int main(){
int i,j;
cin>>n;
for(i=0;i<n;i++){
cin>>nod.L>>nod.W;
vec.push_back(nod);
}
sort(vec.begin(),vec.end(),cmp);
deal();
cout<<ans+1<<endl;
return 0;
}