acwing1012
桥以上坐标从小到大排序后,找出下坐标的最长上升子序列长度。
判断直线是否相交的思路很巧妙。
const int N = 5e3 + 7, M = 1e6; int dp[N]; pii s[N]; int main() { IOS; int n; cin >> n; for (int i = 0; i < n; i++) { cin >> s[i].ft >> s[i].sd; } sort(s, s + n); int ans = 0; for (int i = 0; i < n; i++) { dp[i] = 1; for (int j = 0; j < i; j++) if (s[j].sd < s[i].sd && dp[j] + 1 > dp[i]) dp[i] = dp[j] + 1; ans = max(ans, dp[i]); } cout << ans << endl; return 0; }