P2782友好城市(LIS,动态规划dp)C语言版
题目描述
有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免事故。编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航道不相交的情况下,被批准的申请尽量多。
输入格式
第1行,一个整数N,表示城市数。
第2行到第n+1行,每行两个整数,中间用一个空格隔开,分别表示南岸和北岸的一对友好城市的坐标。
输出格式
仅一行,输出一个整数,表示政府所能批准的最多申请数。
输入输出样例
输入
7
22 4
2 6
10 3
15 12
9 8
17 17
4 2
输出
4
说明/提示
50% 1<=N<=5000,0<=xi<=10000
100% 1<=N<=2e5,0<=xi<=1e6
直接代码放上
#include<stdio.h>
#include<malloc.h>
int quick(int str[],int a[],int x,int y);//自定义快排
int max(int a,int b);
int main()
{int n,i,j,ans=1;scanf("%d",&n);int *N=(int *)malloc(sizeof(int)*n);int *S=(int *)malloc(sizeof(int)*n);int *dp=(int *)malloc(sizeof(int)*n);for(i=0;i<n;i++){scanf("%d %d",&N[i],&S[i]);}quick(N,S,0,n);for(i=0;i<n;i++)//lis求最长上升序列{dp[i]=1;for(j=0;j<i;j++){if(S[j]<S[i]){if(dp[i]<max(1,dp[j]+1)){dp[i]=max(1,dp[j]+1);ans=max(ans,dp[i]);}}}}printf("%d",ans);return 0;}
int quick(int str[],int a[],int x,int y)//找中间数
{if(x<y) {int t,j,k;t=x;j=y-1;while(t!=j){for(j;j>t;j--){if(str[t]>str[j]){k=str[t];str[t]=str[j];str[j]=k;k=a[t];a[t]=a[j];a[j]=k;break;}}for(t;t<j;t++){if(str[t]>str[j]){k=str[t];str[t]=str[j];str[j]=k;k=a[t];a[t]=a[j];a[j]=k;break;}}}quick(str,a,x,t);quick(str,a,t+1,y);
}
}
int max(int a,int b)
{if(a<b)return b;elsereturn a;
}
tip:代码本身没有问题,但是在洛谷上只能跑50分,因为测试数据过大会超时,这可能是用C语言做OJ比不上C++吧,如果想跑AC的话可能要对算法优化 ,但是快排已经很优化了。。。。
P2782友好城市(LIS,动态规划dp)C语言版相关推荐
- P2782 友好城市
题目描述 有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市.北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同.每对友好城市都向政府申请在河上开辟一条直线航 ...
- 友好城市(线性dp)
友好城市2 时间限制:1秒 内存限制:125M 题目描述 有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市.北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市 ...
- 洛谷 P2782 友好城市
题目链接:友好城市 - 洛谷 思路:对两组河东河西的坐标,如果x1>x2,但y1<y2则会交叉.所以可以将n对城市按x排序,求y的最长上升子序列. dp法:(超时) #include< ...
- 不止代码:友好城市(动态规划)
解析 先按左端点排序得到一个右端点的新队列,然后就可以发现: 所有合法的方案都是新队列的一个单调递增队列 然后就转化成了最长上升序列的问题 代码 #include<bits/stdc++.h&g ...
- AC日记——友好城市 洛谷 P2782
题目背景 无 题目描述 有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市.北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同.没对友好城市都向政府申请在河上 ...
- 【动态规划】友好城市
第二天叫醒我的不是闹钟,是梦想! 题目描述 一条河从东向西流过,并把魔法世界分为南北两个部分.河的两岸各有n个城市,且北岸的每一个城市都与南岸的某个城市是友好城市,而且对应的关系是一一对应的,如图所示 ...
- 动态规划7--例9.7友好城市
1263:[例9.7]友好城市 [题目描述] Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市. 北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市 ...
- [AcWing] 1012. 友好城市(C++实现)最长上升子序列模型、较为特殊
[AcWing] 1012. 友好城市(C++实现)最长上升子序列模型 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. 总 ...
- 信息学奥赛一本通 1263:【例9.7】友好城市
[题目链接] ybt 1263:[例9.7]友好城市 [题目考点] 1. 动态规划:线性动规 2. 排序 [解题思路] 该题可以抽象为两条平行线上各有若干点,给定一些两条线上点之间的连线,在选出连线不 ...
最新文章
- java 文件拷贝文件怎么打开_java如何拷贝文件
- nChain首席科学家CSW:闪电网络会把BCE变成空洞的幽灵
- JS知识点笔记-常用方法
- CSS基础_Day04
- php随机数字不重复,php生成N个不重复的随机数
- java.util.concurrent.Locks使用指南
- elementui下拉框选择图片_Element UI系列:Select下拉框实现默认选择
- react-native this使用笔记
- jdbc 自增id 原理_如何实现 Oracle 的自增序列,两步轻松搞定
- OpenTSDB的读写API
- String s = new String(“abc“)创建了几个对象
- PROTEL技术应用技巧总结
- Zepto Api参考
- 序列二次规划——SQP
- Windows 有哪些冷门但是非常值得推荐的软件?
- 【FinE】EMD/EEMD方法及金融数据分解
- cs5460a c语言程序,cs5460a应用电路(含源程序)
- 记录一下blender烘焙光照漫反射贴图
- 网页怎么算切屏_十种切屏抓取方法(图形)
- 企业微信组织架构同步优化的思路