HDU1950:Bridging signals
来源:互联网 发布:linux java环境 编辑:程序博客网 时间:2024/06/06 05:09
Description
expensive to redo the routing. Instead, the engineers have to bridge the signals, using the third dimension, so that no two signals cross. However, bridging is a complicated operation, and thus it is desirable to bridge as few signals as possible. The call for a computer program that finds the maximum number of signals which may be connected on the silicon surface without rossing each other, is imminent. Bearing in mind that there may be housands of signal ports at the boundary of a functional block, the problem asks quite a lot of the programmer. Are you up to the task?
Figure 1. To the left: The two blocks' ports and their signal mapping (4,2,6,3,1,5). To the right: At most three signals may be routed on the silicon surface without crossing each other. The dashed signals must be bridged.
A typical situation is schematically depicted in figure 1. The ports of the two functional blocks are numbered from 1 to p, from top to bottom. The signal mapping is described by a permutation of the numbers 1 to p in the form of a list of p unique numbers in the range 1 to p, in which the i:th number pecifies which port on the right side should be connected to the i:th port on the left side.
Two signals cross if and only if the straight lines connecting the two ports of each pair do.
Input
Output
Sample Input
4
6
4 2 6 3 1 5102 3 4 5 6 7 8 9 10 188 7 6 5 4 3 2 195 8 9 2 3 1 7 4 6
Sample Output
3914题目大意:求严格递增序列的最大长度。
知识点: 摘自某个屌比
简述:LIS问题,即最长上升子序列问题,经典的解法有序列DP,通过这个算法,可以获得最长上升子序列的各种详细信息。但是,我们有时候只需要求最长上升子序列的长度,但是o(n^2)的时间复杂度太慢了,我们希望有一种算法,可以更快一点。算法过程 既然动态规划太慢了,那么自然就想到了贪心。下述算法,就是运用了二分+贪心 首先考虑一个序列s:1、3、2、7、5、6、4 (一共7个数),另外一个辅助数组d,最终序列长度为ans 第1个数:d[1] = s[1] = 1 , ans = 1 ; 第2个数:s[2] > s[1] , 所以d[2] = s[2] , ans = 2 ; 第3个数:d[1] < s[3] < d[2] , 此时ans不改变,但是根据贪心法则,d[2] = s[3] ; 第4个数:s[4] > d[2], d[3] = s[4] = 7 , ans = 3 ; 第5个数:s[5] < d[3] , ans不变,根据贪心法则,d[3] = s[5] ; 第6个数:s[6] > d[4] , d[4] = s[6] , ans =4 ; 第7个数:s[7] < d[4] , 为保证算法完整性,d[3] = s[7] (这里替代的数是第一个大于key的数)。 此时ans=4,d数组为:1、2、4、6 。 (如d[3]=4,意为有个队尾元素为4(最小的序列)的序列使得序列长度为3)虽然我们算出了答案,但是我们并不能得到最终的最长子序列,这就是这个算法的不足。
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int s[50001];int d[50001];int main(){int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&s[i]);} int len=1; d[1]=s[1];for(int i=2;i<=n;i++){ if(s[i]>d[len]) { len++; d[len]=s[i]; } else { int l=1; int r=len;int mid;int cut; while(l<=r) { mid =(l+r)/2; if(s[i]<d[mid]) { cut=mid; r=mid-1; } else { l=mid+1; } } d[cut]=s[i]; }}printf("%d\n",len);}return 0;}
- HDU1950:Bridging signals(LIS)
- HDU1950:Bridging signals(LIS)
- HDU1950:Bridging signals
- HDU1950 Bridging signals 裸LIS
- HDU1950 Bridging signals LIS优化
- Bridging signals ZOJ 3627 POJ1631 HDU1950
- HDU1950-Bridging signals-最长上升子序列
- hdu1950 Bridging signals (nlogn的lis)
- HDU1950[Bridging signals] LIS模型 (nlogn)
- hdu1950 Bridging signals(最长递增子序列二分)
- HDU1950-Bridging signals(最长上升子序列)
- 【HDU1950】Bridging signals (最长上升子序列DP(nlogn))
- ZOJ3627 POJ1631 HDU1950 Bridging Signals,O(N*logN)版最长上升子序列问题
- 【DP】HDU1950 Bridging signals——LIS最大上升子序列算法
- UVALive2931 POJ1631 HDU1950 ZOJ1986 Bridging signals【最长上升子序列+二分+堆栈】
- hdu1950 poj1631 Bridging signals(n*logn的最长递增子序列)
- Bridging signals
- Bridging signals
- HDU-5826-physics-数学推导
- 获取Spring的ApplicationContext的方法
- Linux-进程笔记
- 关于后缀自动机的构造
- Android Studio 导入项目, Gradle 太慢太慢。我已经用了VPN啊!!!!
- HDU1950:Bridging signals
- 日志查询系统-----Kibana+Logstash+Elasticsearch
- java 文件IO流
- android 艺术开发探索之线程和线程池
- java设计模式——外观模式(Facade Pattern)
- 可能MysqlDB的一个BUG产生的warning 2016.08.12回顾
- iOS捕获异常,常用的异常处理方法
- [Qt5.5+VS2013] 初学总结
- ASP.NET UpdatePanel实现点击按钮无刷新且执行js脚本