UVa 10635 (LIS+二分) Prince and Princess
题目的本意是求LCS,但由于每个序列的元素各不相同,所以将A序列重新编号{1,2,,,p+1},将B序列重新编号,分别为B中的元素在A中对应出现的位置(没有的话就是0)。
在样例中就是A = {1 7 5 4 8 3 9},B = {1 4 3 5 6 2 8 9}
重新编号以后:
A = {1 2 3 4 5 6 7}, B = {1 4 6 3 0 0 5 7}(里面的0在求LIS时可以忽略)
这样求A、B的LCS就转变为求B的LIS
求LIS用二分优化,时间复杂度为O(nlogn)
第一次做的用二分求LIS的题是HDU 1025
http://www.cnblogs.com/AOQNRMGYXLMV/p/3862139.html
在这里再复习一遍
1 //#define LOCAL 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm> 6 using namespace std; 7 8 const int maxn = 250 * 250; 9 int num[maxn], s[maxn], dp[maxn]; 10 11 int main(void) 12 { 13 #ifdef LOCAL 14 freopen("10635in.txt", "r", stdin); 15 #endif 16 17 int T, kase; 18 scanf("%d", &T); 19 for(kase = 1; kase <= T; ++kase) 20 { 21 int N, p, q, x; 22 scanf("%d%d%d", &N, &p, &q); 23 memset(num, 0, sizeof(num)); 24 for(int i = 1; i <= p+1; ++i) 25 { 26 scanf("%d", &x); 27 num[x] = i; 28 } 29 int n = 1; 30 for(int i = 1; i <= q+1; ++i) 31 { 32 scanf("%d", &x); 33 if(num[x]) 34 s[n++] = num[x]; 35 } 36 //求s[1]...s[n]的LIS 37 dp[1] = s[1]; 38 int len = 1; 39 for(int i = 2; i <= n; ++i) 40 { 41 int left = 1, right = len; 42 while(left <= right) 43 { 44 int mid = (left + right) / 2; 45 if(dp[mid] < s[i]) 46 left = mid + 1; 47 else 48 right = mid - 1; 49 } 50 dp[left] = s[i]; 51 if(left > len) 52 ++len; 53 } 54 55 printf("Case %d: %d\n", kase, len); 56 } 57 return 0; 58 }
代码君
大白书里面用到了lower_bound函数
函数介绍
lower_bound()返回一个 iterator 它指向在[first,last)标记的有序序列中可以插入value,而不会破坏容器顺序的第一个位置,而这个位置标记了一个大于value 的值。
效果是一样的
1 //#define LOCAL 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 #include <algorithm> 6 using namespace std; 7 8 const int INF = 1000000000; 9 const int maxn = 250 * 250; 10 int num[maxn], s[maxn], g[maxn], d[maxn]; 11 12 int main(void) 13 { 14 #ifdef LOCAL 15 freopen("10635in.txt", "r", stdin); 16 #endif 17 18 int T, kase; 19 scanf("%d", &T); 20 for(kase = 1; kase <= T; ++kase) 21 { 22 int N, p, q, x; 23 scanf("%d%d%d", &N, &p, &q); 24 memset(num, 0, sizeof(num)); 25 for(int i = 1; i <= p+1; ++i) 26 { 27 scanf("%d", &x); 28 num[x] = i; 29 } 30 int n = 0; 31 for(int i = 1; i <= q+1; ++i) 32 { 33 scanf("%d", &x); 34 if(num[x]) 35 s[n++] = num[x]; 36 } 37 //求s[1]...s[n]的LIS 38 for(int i = 1; i <= n; ++i) 39 g[i] = INF; 40 int ans = 0; 41 for(int i = 0; i < n; ++i) 42 { 43 int k = lower_bound(g+1, g+n+1, s[i]) - g; 44 d[i] = k; 45 g[k] = s[i]; 46 ans = max(ans, d[i]); 47 } 48 printf("Case %d: %d\n", kase, ans); 49 } 50 return 0; 51 }
代码君
转载于:https://www.cnblogs.com/AOQNRMGYXLMV/p/3898561.html
UVa 10635 (LIS+二分) Prince and Princess相关推荐
- HDU 4685 Prince and Princess(二分匹配加点建图+强连通分量)
题目链接 Problem Description There are n princes and m princesses. Princess can marry any prince. But pr ...
- uva10635 Prince and Princess LCS 变 lIS
// uva10635 Prince and Princess LCS 变 lIS // 本意求LCS,但是规模有60000多,复杂度肯定不够 // 注意如果俩个序列的值的范围相同,那么可以在一个 / ...
- UVA 10635 王子和公主
UVA 10635 [题目描述]:王子和公主 一个王子和公主在n*n的格子中行走,这些格子是有1....n^2的编号的.现在给定p+1个数,再给定q+1个数,公主和王子可以选择其中某些格子行走,求他们 ...
- H - Prince and Princess 计蒜客 - 42402
H - Prince and Princess 计蒜客 - 42402 题意: 你现在要寻找公主,有三种人,第一种是说真话的人(至少为1,因为公主是说真话的人),第二种人是只会说假话的,第三种是胡说八 ...
- HDU4685:Prince and Princess(二分图匹配+tarjan)
Prince and Princess Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Othe ...
- Prince and Princess问题解决
摘要 这是突然看到的一个非常有意思的题,是ACM-ICPC的原题,在这里稍微做一些分析,希望对大家有帮助. Prince and Princess 题面 王子m和公主Hff相爱,想要娶公主.虽然公主非 ...
- uva 10635 Prince and Princess(LCS成问题LIS问题O(nlogn))
标题效果:有两个长度p+1和q+1该序列.的各种元素的每个序列不是相互同.并1~n^2之间的整数.个序列的第一个元素均为1. 求出A和B的最长公共子序列长度. 分析:本题是LCS问题,可是p*q< ...
- UVA 10635——Prince and Princess
题意:给定两个长度为p+1和q+1的序列,求两个序列的LCS. 思路:如果直接使用朴素的LCS算法则O(pq)会超时,可以把A中出现的元素编码,然后映射到B(只保留AB都存在的元素),这样就转化为求B ...
- UVA 10635 Prince and Princess
题意: 求两数字串的最长公共子序列(LCS). 思路: LCS的时间复杂度为O(nn),因为数据量大,所以会超时. 又因为数字串互不相同,所以可以LCS转LIS(最长上升子序列),LIS有时间复杂度O ...
最新文章
- 在angularjs实现一个时钟
- lol战绩查询接口_大聪明,3000元配置一台能畅玩LOL、CF、DNF的腾讯全家桶电脑,该怎么办?——12.10更新...
- 牛客网数组排序NC140
- MapReduce案例-wordcount-JobMain代码
- Java 树的构造算法
- rxtx串口事件不触发_一种串口高效收发思路及方案
- 综合能源业务有哪些?
- Unity商店下载存储地址
- java读写十六进制文件_Java:文件到十六进制
- html 不显示undefine,undefined是阴性的意思吗
- 僵尸网络_僵尸网络钓鱼
- 微信支付-本地测试方法-java代码
- phpmyadmin 4.8.1 Remote File Inclusion Vulnerability (CVE-2018-12613)漏洞复现
- Android 问题:Installation failed due to: ‘Invalid File:
- GBase 8a 数据抽取工具orato8a用法介绍
- 为什么C数组下标从0开始,而不是从1开始
- Windows 7之如何更改计算机名
- Java开发工程师个人简历模板,简洁,给人正规,严谨的形象
- dynamic web module version 3.0
- 程序员拒绝PM小姐姐需求的 4 大理由!