题目:
Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。
北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。
每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免事故。
编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航线不相交的情况下,被批准的申请尽量多。
代码:
#include<bits/stdc++.h>
using namespace std;
pair<int,int> node[5050];
int dp[5050];
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d",&node[i].first,&node[i].second);
}
sort(node+1,node+1+n);
int ans=0;
for(int i=1;i<=n;i++){
int res=0;
for(int j=i-1;j>=1;j--){
if(node[j].second<node[i].second)res=max(res,dp[j]);
}
dp[i]=res+1;
ans=max(dp[i],ans);
}
printf("%d",ans);
return 0;
}