hdu----(1950)Bridging signals(最长递增子序列 (LIS) )
Bridging signals
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 667 Accepted Submission(s): 443
Problem Description
'Oh no, they've done it again', cries the chief designer at the Waferland chip factory. Once more the routing designers have screwed up completely, making the signals on the chip connecting the ports of two functional blocks cross each other all over the place. At this late stage of the process, it is too 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
On the first line of the input, there is a single positive integer n, telling the number of test scenarios to follow. Each test scenario begins with a line containing a single positive integer p<40000, the number of ports on the two functional blocks. Then follow p lines, describing the signal mapping: On the i:th line is the port number of the block on the right side which should be connected to the i:th port of the block on the left side.
Output
For each test scenario, output one line containing the maximum number of signals which may be routed on the silicon surface without crossing each other.
Sample Input
4 6 4 2 6 3 1 5 10 2 3 4 5 6 7 8 9 10 1 8 8 7 6 5 4 3 2 1 9 5 8 9 2 3 1 7 4 6
Sample Output
3 9 1 4
Source
简单的题目。几乎等于一个模板题..... ->_->
不过前提得失你理解还有这样一个算法,当然还有其他做法,比如用线段树+dp做法
代码:
1 //#define LOCAL
2 #include<cstdio>
3 #include<cstring>
4 #include<algorithm>
5 #include<iostream>
6 #define inf 0x3f3f3f3f
7 using namespace std;
8 const int maxn=40005;
9
10 int str[maxn],ans[maxn],dp[maxn];
11 int n,dd;
12
13 int LIS(int a[], int n)
14 {
15 int i, j,res=0;
16 for(i=1;i<=n;i++)
17 ans[i]=inf;
18 memset(dp,0,sizeof(int)*(n+1));
19 for(i=1;i<=n;++i)
20 {
21
22 dp[i]=lower_bound(ans+1,ans+n+1,a[i])-ans;
23 // j=bsearch(c, size, a[i]); //在已有的序列中进行替换
24 if(res<dp[i])res=dp[i];
25 j=i;
26 if(j>0&&ans[dp[j]]>a[j])
27 ans[dp[j]]=a[j];
28 }
29 return res;
30 }
31
32
33 int main()
34 {
35 #ifdef LOCAL
36 freopen("test.in","r",stdin);
37 #endif
38 int cas;
39 scanf("%d",&cas);
40 while(cas--){
41
42 scanf("%d",&n);
43 for(int i=1;i<=n;i++)
44 {
45 scanf("%d",str+i);
46 }
47 printf("%dn",LIS(str,n));
48 }
49 return 0;
50 }
- 在 Linux 上搭建Jekyll静态博客
- 基于Metronic的Bootstrap开发框架经验总结(5)--Bootstrap文件上传插件File Input的使用
- 网易严选 App 感受 Weex 开发
- MBR勒索木马再度来袭:GoldenEye分析
- Docker Compose 1.18.0 之服务编排详解
- 基于Metronic的Bootstrap开发框架经验总结(6)--对话框及提示框的处理和优化
- 基于Metronic的Bootstrap开发框架经验总结(7)--数据的导入、导出及附件的查看处理
- Ubuntu 17.04 x64 安装 Docker CE
- 这是一篇清晰易懂的 Rxjava 入门教程
- 可能是最详细的部署:Docker Registry企业级私有镜像仓库Harbor管理WEB UI
- 简单好用的阴影库 ShadowLayout
- 【项目管理和构建】——Maven下载、安装和配置(二)
- 打印机安全研究(一):不容乐观的网络打印机安全状况
- Apache Maven 入门篇
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Day4.Linux用户权限
- 如何使用Canal同步MySQL的Binlog到Kafka
- Go 每日一库之 gabs
- 如何将Flink应用的日志发送到kafka
- 锦囊篇|Java中的SPI机制
- webpack实战——生产环境配置【上】
- 深度阅读之《Concurrency in Go》
- 为了不让代码看起来像一坨* 我在工作中反复用了这个
- 在 Go 语言中 Patch 非导出函数
- SpringCloud 配置中心服务端配置解析流程分析
- Qt多线程编程之线程池
- PWN:Tcache Attack原理
- [Go]GO语言实战-GO-FLY在线客服cobra库命令行参数解析
- [Go]GO语言实战-GO-FLY在线客服gorm导入sql文件
- Day7.数据类型-集合