友好城市(最长上升子序列)

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;
}
上一篇:CoinList项目中Stader(SD)即将登场,会给我们带来怎样的期待呢


下一篇:Linux 进程调度