最长上升子序列模型-友好城市

友好城市

题解:

这是一个很有意思的题。 说时候开始完全没有想到是LIS模型。
在这里插入图片描述
题目中描述的就是这样的一个图片但是要我们满足不相交。
所以我们可以知道,我们对下面一排的序号进行排序过后,我们上面如果由序号大于前面的序号,那么一定是相交的。所以这道题就变成了排序过后求LIS的过程。

#include<bits/stdc++.h>
using namespace std;
const int N=5e3+5;
typedef pair<int,int> PII;
PII p[N];
int f[N];
int main()
{
	int n; cin>>n;
	for(int i=1;i<=n;i++) cin>>p[i].first>>p[i].second;
	sort(p+1,p+1+n);
	int res=0;
	for(int i=1;i<=n;i++){
		f[i]=1;
		for(int j=1;j<i;j++){
			if(p[i].second>p[j].second) f[i]=max(f[i],f[j]+1);
			res=max(res,f[i]);
		}
	}
	cout<<res<<endl;
}
发布了92 篇原创文章 · 获赞 6 · 访问量 1179

猜你喜欢

转载自blog.csdn.net/weixin_42979819/article/details/103898257