uva 10635 - Prince and Princess(LCS)】的更多相关文章

题目连接:10635 - Prince and Princess 题目大意:给出n, m, k,求两个长度分别为m + 1 和 k + 1且由1~n * n组成的序列的最长公共子序列长的. 解题思路:按一般的o(n^2)的算法超时了,所以上网查了下LCS装换成LIS的算法o(nlogn).算法仅仅是将其中的一个序列重新标号1~m,然后按最长公共子序列的方法去做. #include <stdio.h> #include <string.h> const int N = 90000;…
题目链接: http://bak.vjudge.net/problem/UVA-10635 Prince and Princess Time Limit: 3000MS 题意 给你两个数组,求他们的最长公共子串. 题解 每个数组的大小最大有62500,所以n^2的经典算法肯定行不通. 那么,我么就需要找突破口:这题和一般的最长公共子串问题有什么不同,题目告诉我们每个数字只出现一次.明显要在这上面做文章!由于每个数位子固定了,所以匹配是唯一的,(pos1,pos2)表示数x在a数组中的位置,在b数…
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1576 题目大意: 有两串长度分别为p+1和q+1的序列,每个序列中的各个元素互不相同,且都是1~n*n之间的整数,两个序列的第一个元素是1,求A和B的最长公共子序列长度. 思路: 求LCS的经典解法时间复杂度为O(P*Q),而p和q可能为250*250=62500. 因为A序列中的所有元素均…
两个长度分别为p+1和q+1的由1到n2之前的整数组成的序列,每个序列的元素各不相等,两个序列第一个元素均为1.求两个序列的最长公共子序列 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1576 LCS的复杂度为O(p∗q),这题p,q最大为250 * 250,必T无疑. 注意题目说的每个序列的元素各不相等,那么就能保证我们可以把序列A的…
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1576 题意 两个元素互不相同(在自身数列中互不相同)的数列,求二者的LCS. 思路 如刘书, 非常棒的思路: 1. 明显LCS问题只要关注两个数列的交集,利用第一个数列a的元素,对第二个数列b中的元素重编号(b元素中没有出现在a数列中的可以忽略)问题就转化为最长上升子序列问题. 2.…
标题效果:有两个长度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,…
题目大意:有n*n个方格,王子有一条走法,依次经过m个格子,公主有一种走法,依次经过n个格子(不会重复走),问他们删去一些步数后,重叠步数的最大值. 显然是一个LCS,我一看到就高高兴兴的打了个板子上去,结果TLE+RE. 仔细一看:n<=250,那么二维数组就得开250*250*250*250了,显然RE了. 所以我想着用滚动数组来存储,但是TLE又拦住了我的去路. O(n^2)的效率就是62500*62500,大于10^8,所以1s之内完不成,所以要想别的办法. 偶然在网上找到了O(nlog…
直接LCS是时间复杂度是O(p*q)的,但是序列元素各不相同,只要把其中一个序列映射成有序的, 另外一个序列再做相同的映射,没有的直接删掉,就变成了求另一个序列LIS. #include<bits/stdc++.h> using namespace std; int read() { '); '; +c-'; return re; } *; int mp[maxn]; int S[maxn],g[maxn]; //#define LOCAL int main() { #ifdef LOCAL…
题意:有两个长度分别为p+1和q+1的序列,每个序列中的各个元素互不相同,且都是1~n2的整数.两个序列的第一个元素均为1.求出A和B的最长公共子序列长度. 分析: A = {1,7,5,4,8,3,9},B = {1,4,3,5,6,2,8,9}. 1.A中元素各不相同,因此将A中序列重新编号为1~p+1,即A中每个元素在A中是第几个出现的. 2.按照A中制定的编号原则给B重新编号,则B为{1,4,6,3,0,0,5,7},0表示这些元素在A中没有出现过. 3.新的A和B的LCS实际上就是新的…
题目链接: http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=19051 题意: 有两个长度分别为p+1和q+1的由1到n2之前的整数组成的序列,每个序列的元素各不相等,两个序列第一个元素均为1.求两个序列的最长公共子序列. 分析: LCS的复杂度为O(p∗q),这题p,q最大为250 * 250,必T无疑. 注意题目说的每个序列的元素各不相等,那么就能保证我们可以把序列A的元素用1到p+1重新进行赋值,把B中元素根据A…
讲一下题目大意,就是有两个长度为p + 1和q + 1的序列,求它们的LCS. 如果用O(pq)的算法对于这道题来说还是太慢了.所以要另外想一些方法.注意到序列中的所有元素都不相同,所以两个序列中数对应的位置都是唯一的,就用第一个序列的元素对第二个序列的元素进行重新编号,记录它们在第一个序列中出现的位置(如果不存在就随便记一个不能达到的值),不存在的话就说明它们对LCS没有贡献.那么看张图: 如果不能明白,那..看张反例: 有没有发现LCS的长度就是第二个序列的LIS的长度? /** * uva…
讲一下题目大意,就是有两个长度为p + 1和q + 1的序列,求它们的LCS. 如果用O(pq)的算法对于这道题来说还是太慢了.所以要另外想一些方法.注意到序列中的所有元素都不相同,所以两个序列中数对应的位置都是唯一的,就用第一个序列的元素对第二个序列的元素进行重新编号,记录它们在第一个序列中出现的位置(如果不存在就随便记一个不能达到的值),不存在的话就说明它们对LCS没有贡献.那么看张图: 如果不能明白,那..看张有关不合法情况的图: 有没有发现LCS的长度就是第二个序列的LIS的长度? /*…
题意描述:有两个长度分别为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> #includ…
图片加载可能有点慢,请跳过题面先看题解,谢谢 这道题... 还是要点思维的... 第一眼看是个最长公共子序列,但是, \(N\le 62500\) ,并不能 \(O(n^2)\) 求 $ $ 这道题有个很好的性质,每个序列中的元素互不相同 也就是说,在一个序列中,每一个数字都有一个唯一的位置 这有什么用? $ $ 我们进行这样一个操作,把 \(b\) 序列中的数字换成该数字在 \(a\) 序列中出现的位置,那么问题就变成了一个求 \(b\) 序列的 \(LCS\) 的问题了 这样我们就可以在 \…
题目 In an n * n chessboard, Prince and Princess plays a game. The squares in the chessboard are numbered 1, 2, 3 ... n*n, as shown below: Prince stands in square 1, make p jumps and finally reach square n*n. He enters a square at most once. So if we u…
Problem D Prince and Princess Input: Standard Input Output: Standard Output Time Limit: 3 Seconds In an n x n chessboard, Prince and Princess plays a game. The squares in the chessboard are numbered 1, 2, 3 ... n*n, as shown below: Prince stands in s…
题目 传送门:QWQ 分析 水题.$ O(nlogn) $的LCS 代码 #include <bits/stdc++.h> using namespace std; *, INF=1e9; int S[maxn], g[maxn], d[maxn]; int num[maxn]; int main(){ int T; scanf("%d",&T); ;kase<=T;kase++){ int N,p,q,x; scanf("%d%d%d",…
题目大意 有两个长度分别为p+1和q+1的序列,每个序列中的各个元素互不相同,且都是1~n^2之间的整数.两个序列的第一个元素均为1.求出A和B的最长公共子序列长度. 题解 这个是大白书上的例题,不过这题真的很好,很考验思维.因为p和q都是250^2=62500,如果用LCS的话时间复杂度是O(pq),显然会超时....不过这题的两个序列很特殊,就是没有重复的元素,这样可以把A中的元素重新编号为1~p+1.然后B根据A也重新编号,这样,新的A和B的LCS实际上就是新的B的LIS.LIS可以在O(…
题目描述 在信息科学中有一些是关于在某些条件限制下,找出一些计算的最大值. 以历史考试来说好了,学生被要求对一些历史事件根据其发生的年代顺序来排列.所有事件顺序都正确的学生无疑的可以得满分.但是那些没有全对的人又该如何给分呢?以下有2种可能的给分方式: 1. 每个与标准答案的顺序相同的事件得1分 2. 每个在最长(但不一定要连续)的序列事件中,其相对的顺序亦可以在标准答案发现者,每个事件得1分. 举例说明:如果有4个事件其发生时间的顺序依次是1 2 3 4(就是标准答案啦,意思是第1个事件发生顺…
题目: 思路: 求两个串的最长公共子序列,则这个最短的串就是给出的两个串的长度和减去最长公共子序列的长度. 状态转移方程: 如果s[i-1]==t[j-1]就有dp[i][j] = dp[i-1][j-1]+1; 否则有dp[i][j] = max(dp[i-1][j], dp[i][j-1]) dp[i][j]表示从s中选前i个,从t中选前j个字符中最长公共子序列的长度. 注意: 给出的两个串可能是空串,这时候就要用gets来输入字符串. 代码: #include <bits/stdc++.h…
题目连接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1576 13935381 10635 Prince and Princess Accepted C++ 0.095 2014-07-24 03:41:18 Prince and PrincessInput: Standard Input Output: Standard Output…
嘤嘤嘤,我又来了,刚A完就写,这个沙雕题有丶恶心.                  ???时间4.11发现所有表情包都莫得了 题目: In an n×n chessboard, Prince and Princess plays a game. The squares in the chessboard are numbered 1, 2, 3, . . . , n∗n, as shown below:   Prince stands in square 1, make p jumps and…
Prince and Princess Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 2336    Accepted Submission(s): 695 Problem Description There are n princes and m princesses. Princess can marry any prince. B…
Prince and Princess Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1267    Accepted Submission(s): 358 Problem Description There are n princes and m princesses. Princess can marry any prince. B…
Prince and Princess Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 150    Accepted Submission(s): 46 Problem Description There are n princes and m princesses. Princess can marry any prince. But…
Prince and Princess Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 2281    Accepted Submission(s): 677 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4685 Description: There are n princes and m…
BEGIN LIS: 一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的.对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序列(ai1, ai2, …, aiK),这里1 <= i1 < i2 < … < iK <= N.比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等.这些子序列中最长的长度是4,比如子序列(1, 3, 5, 8…
一个时间效率为o(nlogn)的算法求公共子序列的应用 Prince and princess 题目大意(已翻译 ) 在nxn的棋盘上,王子和公主玩游戏.棋盘上的正方形编号为1.2.3 ... n * n,如下所示:Prince站在正方形1中,进行p跳跃,最后到达正方形n * n.他最多只能进入一个广场.因此,如果我们使用xp表示他输入的第p个平方,则x1,x2,... xp + 1都不同.注意,x1 = 1,xp + 1 = n * n.公主做类似的事情-站在方格1中,使q跳,最后到达方格n…
1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与母串保持一致,我们将其称为公共子序列.最长公共子序列(Longest Common Subsequence, LCS),顾名思义,是指在所有的子序列中最长的那一个.子串是要求更严格的一种子序列,要求在母串中连续地出现.在上述例子的中,最长公共子序列为blog(cnblogs, belong),最长公…
先要搞明白:最长公共子串和最长公共子序列的区别.    最长公共子串(Longest Common Substirng):连续 最长公共子序列(Longest Common Subsequence,LCS):不必连续   实在是汗颜,网上做一道题半天没进展: 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串.如何删除才能使得回文串最长呢?输出需要删除的字符个数. 首先是自己大致上能明白应该用动态规划的思想否则算法复杂度必然过大.可是对于回文串很难找到其状态和状态转移方程,换句话…