友好城市

DP_LIS

题目描述 有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免事故。编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航道不相交的情况下,被批准的申请尽量多。

输入输出格式 输入格式: 第1行,一个整数N,表示城市数。

第2行到第n+1行,每行两个整数,中间用一个空格隔开,分别表示南岸和北岸的一对友好城市的坐标。

输出格式: 仅一行,输出一个整数,表示政府所能批准的最多申请数。

输入输出样例 输入样例#1: 复制 7 22 4 2 6 10 3 15 12 9 8 17 17 4 2 输出样例#1: 复制 4 说明 50% 1<=N<=5000,0<=xi<=10000

100% 1<=N<=2e5,0<=xi<=1e6

#include<cstdio>
using  namespace std;
int n,a[200020],b[200020],f[200020],x,ans,l,r,mid,maxn,i;
int main(){
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        scanf("%d",&x);
        scanf("%d",&a[x]);
    }
    for(i=0;i<=n;i++){
        if(a[i]){
            ans++;
            b[ans]=a[i];
        }
    }
    ans=0;
    for(i=0;i<=n;i++){
        f[i]=-1;
    }
    for(i=1;i<=n;i++){
        if(f[ans]<b[i]){
            f[++ans]=b[i];
        }
        else{
            l=0;r=ans;
            while(l<r){
                mid=(l+r)/2;
                if(f[mid]>=b[i]){
                    r=mid;
                }
                else{
                    l=mid+1;
                }
            }
            f[l]=b[i];
        }
    }
    printf("%d",ans);
}

原文地址:https://www.cnblogs.com/hrj1/p/11141215.html

时间: 2024-10-09 16:24:25

友好城市的相关文章

拦截导弹;合唱队形;友好城市——基本的单调序列动态规划吧

合集,三个题目基本上都一样.耗时也不贴了. 拦截导弹: 1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 const int N=128; 5 int n=1,val[N]; 6 int up[N],dn[N],cnt1,cnt2; 7 int main(){ 8 for(int i=0;i<N;i++)up[i]=dn[i]=1; 9 while(cin>>val[n])n++;n-

洛谷P2782 友好城市

题目描述 有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市.北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同.没对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免事故.编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航道不相交的情况下,被批准的申请尽量多. 输入输出格式 输入格式: 第1行,一个整数N(1<=N<=5000),表示城市数. 第2行到第n+1行,每行两个整数,

洛谷 2782友好城市

题目背景 无 题目描述 有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市.北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同.没对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免事故.编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航道不相交的情况下,被批准的申请尽量多. 输入输出格式 输入格式: 第1行,一个整数N(1<=N<=5000),表示城市数. 第2行到第n+1行,

P2782 友好城市

题目背景 无 题目描述 有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市.北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同.没对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免事故.编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航道不相交的情况下,被批准的申请尽量多. 输入输出格式 输入格式: 第1行,一个整数N(1<=N<=5000),表示城市数. 第2行到第n+1行,

洛谷 P2782 友好城市

P2782 友好城市 题目描述 有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市.北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同.每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免事故.编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航道不相交的情况下,被批准的申请尽量多. 输入输出格式 输入格式: 第1行,一个整数N,表示城市数. 第2行到第n+1行,每行两个整数,中间

【Noip模拟 20161005】友好城市

问题描述 小ww生活在美丽的ZZ国.ZZ国是一个有nn个城市的大国,城市之间有mm条单向公路(连 接城市ii.jj的公路只能从ii连到jj).城市ii.jj是友好城市当且仅当从城市ii能到达城市jj并 且从城市jj能到达城市ii.如果kk个城市两两互为友好城市,那么我们称这kk个城市是友好 城市群,kk为友好城市群的大小.现在小ww想知道友好城市群的大小最大为多少,你能告诉 他吗? 输入格式 第一行包含两个整数nn 和mm. 接下来mm 行,每行两个整数ii和jj,表示有从城市ii到城市jj的一

【dp】友好城市

题目一: [题目描述] Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市.北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同. 每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免事故.编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航线不相交的情况下,被批准的申请尽量多. [输入] 第1行,一个整数N(1≤N≤5000),表示城市数. 第2行到第n+1行,每行两

一本通 1263:【例9.7】友好城市(数据较弱)

友好城市 对北岸(或南岸)的城市从小到大排序,再求南岸(或北岸)的城市位置的最长不下降序列长度即可. ps:这里数据较弱,用n*n的做法可以过. Code: #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; //Mystery_Sky // #define M 1000100 struct node{ int N

1012. 友好城市

Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市. 北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同. 每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免事故. 编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航线不相交的情况下,被批准的申请尽量多. 输入格式 第1行,一个整数N,表示城市数. 第2行到第n+1行,每行两个整数,中间用1个空格隔开,分别表示南岸