最长公共子序列(LCS)
文章平均质量分 50
HelloWorld10086
追随大神的脚步
展开
-
UVA 10405 Longest Common Subsequence(最长公共子序列)
题意:给你两个字符串,要你求出最长公共子串。原创 2014-10-28 11:29:22 · 685 阅读 · 0 评论 -
UVa 10635 Prince and Princess(LCS nlogn)
题意: 给定两个序列,求两个序列的最长公共子序列。解析:由于数据量比较大,p,q 最大为250^2 = 62500。所以O(n^2)解法是过不了的。所以这题要用LCS nlogn的解法。 详见《算法竞赛训练指南》 P 66#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const i原创 2015-02-14 18:33:04 · 550 阅读 · 0 评论 -
UVa 10723 Cyborg Genes(LCS变种)
题意: 给你两个字符串,求一个最短的串,使得这两个串是目标串的子串。思路: 这题可以借鉴LCS的思想,对于求最小串的长度,就很简单了 1. s1[i] == s2[j] l[i, j] = l[i-1, j-1]; 2. s1[i] != s2[j] l[i, j] = min(l[i-1, j], l[i, j-1]) + 1; 对于求有多少种组合方法,定义dp原创 2015-02-23 13:18:10 · 1374 阅读 · 1 评论 -
UVA - 531 Compromise
题目大意:输入两段文字,每段文字以'#'结束,要求你求出这两段文字中最长公共的单词,并输出。解析:可以当两个字符串相等时进行标记,并递归输出,详见代码。#include #include #include #include #include using namespace std;const int N = 105;string s1[N],s2[N];int dp[N][原创 2014-12-28 08:41:26 · 608 阅读 · 0 评论 -
UVA 10723 Cyborg Genes(dp)
题目大意:已知两个母串s1,s2,求它们最短合串的长及组成该长度合串的方法数。解析:可以借鉴用LCS的思想l[i][j]表示s1[i]与s2[j]最短的合串长度dp[i][j]表示s1[i]与s2[j]最短的方法数。初始化l[i][0] = l[0][i] = i;1、当s1[i]==s2[j]时,l[i][j] = l[i-1][j-1]+1;2、否则l[i]原创 2015-02-04 16:21:31 · 531 阅读 · 0 评论 -
UVA-111 History Grading(dp+最长公共子序列)
题意:一个历史考试,有n个历史事件, 它们之间的年份是不同的,要学生把这些事件按照正确的顺序排列出来。有两种记分方式,采用的是第二种: 假设有历史事件1,2,3,4, 它们正确的时间顺序是1,2,3,4, 然后假设学生的答案是1,3,2,4, 那么按照相对顺序正确的数量,答对了三个(1,2,4或者1,3,4),也就是它与正确答案的最长公共子序列长度是3,便是答对的数量。请你求出答对的数原创 2014-10-25 12:45:44 · 814 阅读 · 0 评论 -
UVA - 10066 The Twin Towers(dp+最大公共子序列)
解析:这是一道普通的最大公共子序列的题目。原创 2014-11-06 15:49:26 · 614 阅读 · 0 评论 -
UVA - 10192 Vacation(dp+最大公共子序列)
解析:求两个字符串的最大公共子序列的个数原创 2014-11-07 18:49:02 · 598 阅读 · 0 评论 -
HDU - 1087 Super Jumping! Jumping! Jumping!(dp)
题意:求一个升序,且和最大的序列,输出出该最大序列的和。解析:dp,用一个dp数组存储子问题的解。(dp对应的下标i,从0到i,最长上升子序列的和)从头开始,遍历每一个数,开始第一重循环。对每一个数,又从头遍历到这个数的前一个数,这是第二重循环,在第二重循环中,用下标j表示当前遍历到的数,如果num[i]>num[j],则说明num[j]和num[i]能构成一个上升子序列,但此时还原创 2014-10-25 19:09:21 · 587 阅读 · 0 评论 -
HDU 1503 Advanced Fruits(LCS+输出路径)
题意: 将两个字符串结合起来,他们的公共子串只输出一次解析: 先做一遍LCS,然后记录下路径,然后把是LCS路径上面的点用两个标记数组分别标记一下,然后没有被标记过的位置分别输出,如果被标记过的位置,那么表示那个位置是相同的字符,这个位置只要输出一次。mymy codecode#include <cstdio>#include <cstring>#include <algorithm原创 2015-09-12 14:24:04 · 774 阅读 · 0 评论