线性dp,dp实现很简单,主要是怎么能想到用dp,怎么样才能用dp;当我们把南岸城市从小到大排序,然后再找最长不上升子序列
#include<iostream> #include<cstring> #include<algorithm> using namespace std ; const int N = 50100 ; typedef pair<int,int> PII ; PII a[N] ; int dp[N] ; int n ; int main(){ cin >> n ; for(int i = 1 ; i <= n ; i ++) cin >> a[i].first >> a[i].second; sort(a+1,a+n+1) ; for(int i = 1 ; i <= n ; i++){ dp[i] = 1 ; for(int j = 1 ; j <= i ; j ++){ if(a[j].second < a[i].second) dp[i] = max(dp[i],dp[j] + 1 ); } } int res = 0 ; for(int i = 1 ; i <= n ; i ++ ) res = max(dp[i],res) ; cout << res << endl ; }