Java教程

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

本文主要是介绍友好城市(最长上升子序列),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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;
}
这篇关于友好城市(最长上升子序列)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!