题意描述:有两个长度分别为p+1和q+1的序列,每个元素中的各个元素互不相同。都是1~n^2之间的整数,求A和B的最长公共子序列。(2<=n<=250,1<=p,q<=n^2)

分析:本题是LCS问题,但因为p和q可以高达250^2=62500,O(pq)的算法显然太慢。注意到A序列中所有元素互不相同,因此可以把A中的元素重新编号为1~p+1。这样新的A和B的LCS实际上就是B的LIS。可以在O(nlogn)时间内解决。

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=*;
const int INF=;
int s[maxn],g[maxn],d[maxn];
int num[maxn]; int main()
{
int T;
scanf("%d",&T);
for(int kase=;kase<=T;kase++)
{
int N,p,q,x;
scanf("%d %d %d",&N,&p,&q);
memset(num,,sizeof(num));
for(int i=;i<=p+;i++) {scanf("%d",&x);num[x]=i;}
int n=;
for(int i=;i<q+;i++) {scanf("%d",&x);if(num[x]) s[n++]=num[x];}
for(int i=;i<=n;i++) g[i]=INF;
int ans=;
for(int i=;i<n;i++)
{
int k=lower_bound(g+,g++n,s[i])-g;
d[i]=k;
g[k]=s[i];
ans=max(ans,d[i]);
}
printf("Case %d: %d\n",kase,ans);
}
return ;
}

UVA 10635 Prince and Princess的更多相关文章

  1. uva 10635 - Prince and Princess(LCS)

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

  2. UVA - 10635 Prince and Princess LCS转LIS

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

  3. [题解]UVa 10635 Prince and Princess

    讲一下题目大意,就是有两个长度为p + 1和q + 1的序列,求它们的LCS. 如果用O(pq)的算法对于这道题来说还是太慢了.所以要另外想一些方法.注意到序列中的所有元素都不相同,所以两个序列中数对 ...

  4. UVa 10635 Prince and Princess - 动态规划

    讲一下题目大意,就是有两个长度为p + 1和q + 1的序列,求它们的LCS. 如果用O(pq)的算法对于这道题来说还是太慢了.所以要另外想一些方法.注意到序列中的所有元素都不相同,所以两个序列中数对 ...

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

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

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

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

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

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

  8. Uva 10635 - Prince and Princess LCS/LIS

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

  9. uva 10635 Prince and Princess(LCS成问题LIS问题O(nlogn))

    标题效果:有两个长度p+1和q+1该序列.的各种元素的每个序列不是相互同.并1~n^2之间的整数.个序列的第一个元素均为1. 求出A和B的最长公共子序列长度. 分析:本题是LCS问题,可是p*q< ...

随机推荐

  1. oracle 11g 分区表

    查看所有用户分区表及分区策略(1.2级分区表均包括): SELECT p.table_name AS 表名, decode(p.partitioning_key_count, 1, '主分区') AS ...

  2. Swift Tips - Array 类型

    在开发中,数组这个概念我们应该很熟悉了,Objective-C 中为我们提供了 NSArray 作为数组的实现.大家应该对很熟悉了.而在 Swift 中,为我们提供了它自己对于数组的实现,也是这里我们 ...

  3. MVC 中的@Html.DropDownList下拉框的使用

    MVC 中的下拉框 实现方式,下面为大家介绍一个我自己认为比较好用的实现方式,而二话不说直接上代码: 第一步: 后台代码 //公共的方法 //在每次需要展示下拉框的时候,需要调用一下这个方法 [数据源 ...

  4. scjp考试准备 - 4 - 关于数组

    好吧这道题我丢脸了,竟然做错了. 如下程序的输出结果是: class Alligator{ public static void main(String[] args){ int[]x[] = {{1 ...

  5. MVC3+中 ViewBag、ViewData和TempData的使用和区别

    在MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData.MVC3中保留了ViewData的使用.ViewBag 是动态类型(dynamic),ViewData 是 ...

  6. 004--VS C++ 绘制封闭图形

    //全局变量HPEN hPen;HBRUSH hBru[4];int sBru[4] = { HS_VERTICAL, HS_HORIZONTAL, HS_CROSS, HS_DIAGCROSS }; ...

  7. Error (10028): Can't resolve multiple constant drivers for net "out2" at shiyan.v(14)解决办法

    //Error(10028):Can't resolve multiple constant drivers for net “ ” at **.v //两个进程里都有同一个条件判断的话,会产生并行信 ...

  8. 如何在Quartus II中设置Virtual pin

    为了验证FPGA工程中的某个模块的功能和时序的正确性,常常需要对其单独进行验证,但是这些模块通常都与内部的众多信号相连(如系统总线,中断信号线等),往往一个模块的对外接口引脚会多达几百个,对其单独仿真 ...

  9. cocos游戏的真正入口,用C++实现的demo版本

    1.cocos游戏的出发点 在main函数中有一句:   return CCApplication::sharedApplication()->run(); 2.经过层层深入发现,真正的入口:  ...

  10. PLSQL读取XML的数据

    最近公司做的几个项目,都是通过EBS与外部系统的Web Service进行数据的交互,而调用Web Service的时候,我们所传送的数据,都是按照约定的XML格式来传递,所以EBS接收到数据之后,需 ...