标题效果:有两个长度p+1和q+1该序列。的各种元素的每个序列不是相互同。并1~n^2之间的整数。个序列的第一个元素均为1。

求出A和B的最长公共子序列长度。

分析:本题是LCS问题,可是p*q<=62500,O(pq)的算法显然会LE。在这里有一个条件,每一个序列中的各个元素互不同样,所以能够把A中元素又一次编号为1~p+1。比如,例子中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}(在A中没有出现过的元素一定不会是公共子序列中的元素),当中0表示A中没有出现过,能够直接删去。这时B={1,4,6,3,5,7},元素的值代表着B中和原A中元素值同样的。在A中的位置。子序列的位置一定要是单调递增的,这样求得的最长子序列才相当于原A和B的最长公共子序列。由此。成功转化成LIS问题`(*∩_∩*)′。

求出B的LIS就可以。时间复杂度就能够优化到O(nlogn)了。

以下贴上代码(借鉴lrj巨犇的=-=)

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std; const int maxn = 250*250;
const int INF = 1e9;
int s[maxn],g[maxn],d[maxn];
int num[maxn]; //num[x]为整数x的新编号。num[x]=0表示x没有在A中出现过 int main()
{
int T;
cin>>T;
for(int kase=1;kase<=T;kase++)
{
int N,p,q,x;
cin>>N>>p>>q;
memset(num,0,sizeof(num));
for(int i=1;i<=p+1;i++)
{
cin>>x;
num[x]=i;
}
int n=0;
for(int i=0;i<q+1;i++)
{
cin>>x;
if(num[x]) s[n++]=num[x];
} //求解s[0]...s[n-1]的LIS
for(int i=1;i<=n;i++) g[i]=INF;
int ans=0;
for(int i=0;i<n;i++)
{
int k=lower_bound(g+1,g+n+1,s[i])-g;
d[i]=k;
g[k]=s[i];
ans=max(ans,d[i]);
}
cout<<"Case "<<kase<<": "<<ans<<endl;
}
return 0;
}

关于lower_bound函数(二分查找函数),是STL库的。不懂的童鞋请看http://blog.csdn.net/u012198382/article/details/24887181(lower_bound说明)

版权声明:本文博客原创文章。博客,未经同意,不得转载。

uva 10635 Prince and Princess(LCS成问题LIS问题O(nlogn))的更多相关文章

  1. UVA - 10635 Prince and Princess LCS转LIS

    题目链接: http://bak.vjudge.net/problem/UVA-10635 Prince and Princess Time Limit: 3000MS 题意 给你两个数组,求他们的最 ...

  2. uva 10635 - Prince and Princess(LCS)

    题目连接:10635 - Prince and Princess 题目大意:给出n, m, k,求两个长度分别为m + 1 和 k + 1且由1~n * n组成的序列的最长公共子序列长的. 解题思路: ...

  3. UVA 10635 - Prince and Princess LCS转化为LIS

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  4. Uva 10635 - Prince and Princess LCS/LIS

    两个长度分别为p+1和q+1的由1到n2之前的整数组成的序列,每个序列的元素各不相等,两个序列第一个元素均为1.求两个序列的最长公共子序列 https://uva.onlinejudge.org/in ...

  5. UVA 10635 Prince and Princess【LCS 问题转换为 LIS】

    题目链接: http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=19051 题意: 有两个长度分别为p+1和q+1的由1到n2 ...

  6. Uva 10635 - Prince and Princess 问题转化,元素互不相同(在自身序列中独特)的两个数列的LCS,LIS 难度: 2

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  7. Uva 10635 Prince and Princess (LCS变形LIS)

    直接LCS是时间复杂度是O(p*q)的,但是序列元素各不相同,只要把其中一个序列映射成有序的, 另外一个序列再做相同的映射,没有的直接删掉,就变成了求另一个序列LIS. #include<bit ...

  8. UVA - 10635 Prince and Princess(LCS,可转化为LIS)

    题意:有两个长度分别为p+1和q+1的序列,每个序列中的各个元素互不相同,且都是1~n2的整数.两个序列的第一个元素均为1.求出A和B的最长公共子序列长度. 分析: A = {1,7,5,4,8,3, ...

  9. UVA 10635 Prince and Princess—— 求LCS(最长公共子序列)转换成 求LIS(最长递增子序列)

    题目大意:有n*n个方格,王子有一条走法,依次经过m个格子,公主有一种走法,依次经过n个格子(不会重复走),问他们删去一些步数后,重叠步数的最大值. 显然是一个LCS,我一看到就高高兴兴的打了个板子上 ...

随机推荐

  1. async和await用法

    原文:async和await用法 要理解async和await的用法,首先要了解Task相关知识,这里不做说明,因为这不是本文的重点. 如果你已经对Task很了解,那么如何使用async和await, ...

  2. uva 571 素数的性质

    给定 两个杯子,容量分别分Ca,Cb, 要我们用这两个瓶子倒来倒去,得到某个瓶子里装有N的水 而且给的数据保证  Cb > N,且Ca,Cb互质 那么我们肯定可以在容量为Cb的杯子里得到N的水 ...

  3. Mysql学习笔记(一)数据类型

    原文:Mysql学习笔记(一)数据类型 学习内容: Mysql基本数据类型. 1.数字类型.. i.整型     Mysql数据类型             含义(有符号)     tinyint(m ...

  4. mysql安装前的系统准备工作(转)

    一.系统环境总结:

  5. UVa 12459 - Bees&#39; ancestors

    称号:区区女性有父亲和母亲,区区无人机只有一个母亲,我问一个单纯的无人机第一n随着祖先的数量. 分析:递归.Fib序列. 状态定义:建立f(k)和m(k)分别用于第一k雌蜂和雄蜂的数量: 递推关系:f ...

  6. Oracle GoldenGate (以下简称ogg)在异种移植os同一种db之间的数据同步。

    Oracle GoldenGate (以下简称ogg)在异种移植os同一种db之间的数据同步. ogg要实现的功能: 同步可以细化到单个表,满足特定的where条件rows同步,称号column同步. ...

  7. Google Maps Android API v2 (3)- 地图添加到Android应用程序

    添加地图的基本步骤是: (一旦)按照以下步骤[入门] [开始],获得API,获取密钥所需的属性,并添加到您的Android清单. 添加一个碎片对象 要处理地图的活动.做到这一点最简单的方法是增加一个  ...

  8. linux上安装配置vsftpd(转)

    转自:http://www.webarch.org/category/linux生产环境是Centos5.6,由于需要提供ftp服务,就找了一款比较小巧的ftp服务器端软件,vsftpd(vsftpd ...

  9. ECG信号读出,检测QRS,P,T 波(小波去噪,并根据检测),基于BP辨识的神经网络

    这学期的课程选择神经网络.最后的作业处理ECG信号,并利用神经网络识别. 1  ECG引进和阅读ECG信号 1)ECG介绍  详细ECG背景应用就不介绍了,大家能够參考百度 谷歌.仅仅是简单说下ECG ...

  10. SQL中IN,NOT IN,EXISTS,NOT EXISTS的用法和差别

    SQL中IN,NOT IN,EXISTS,NOT EXISTS的用法和差别: IN:确定给定的值是否与子查询或列表中的值相匹配. IN 关键字使您得以选择与列表中的任意一个值匹配的行. 当要获得居住在 ...