基础dp 先按x排序 再上升子序列
然而还是卡了几下 不知道为啥不能从0开始搞 得从1开始
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <string>
#include <bitset>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <map>
#include <set>
#include<iomanip>
#include <bits/stdc++.h>
/***************************************/
#define ll long long
#define int64 __int64
#define PI 3.1415927
#define INF 99999
const int maxn = 2010;
#define rep(i,n) for(int i=0;i<(n);i++)
using namespace std;
#define MAXN 3010
#define inf 0x3f3f3f3f;
struct node {
int x,y;
} city[5050];
bool cmp( node a,node b)
{
//if(a.x==b.x)
// return a.y<b.y;
return a.x<b.x;
}
int dp[5050];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>city[i].x>>city[i].y;
dp[i]=1;
}
sort(city+1,city+n+1,cmp);
for(int i=2;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
if(city[j].y<city[i].y)
dp[i] =max(dp[j]+1,dp[i]);
}
}
int ans=-1;
for(int i=1;i<=n;i++)
{
ans=max(ans,dp[i]);
}cout<<ans<<endl;
return 0;
}