<Sicily> Longest Common Subsequence
一、题目描述
Given a sequence A = < a1, a2, …, am >, let sequence B = < b1, b2, …, bk > be a subsequence of A if there exists a strictly increasing sequence ( i1 < i2 < i3 …, ik ) of indices of A such that for all j = 1,2,…,k, aij = bj. For example, B = < a, b, c, d > is a subsequence of A= < a, b, c, f, d, c > with index sequence < 1, 2, 3 ,5 >。
Given two sequences X and Y, you need to find the length of the longest common subsequence of X and Y.
二、输入
The input may contain several test cases.
The first line of each test case contains two integers N (the length of X) and M(the length of Y), The second line contains the sequence X, the third line contains the sequence Y, X and Y will be composed only from lowercase letters. (1<=N, M<=100)
Input is terminated by EOF.
三、输出
Output the length of the longest common subsequence of X and Y on a single line for each test case.
例如:
输入:
6 4
abcfdc
abcd
2 2
ab
cd
输出:
4
0
四、解题思路
这道题需要求的是最长公共子序列,典型的动态规划问题。
设序列1:X = < x1, x2, x3, …, xm>,子序列2:Y=< y1, y2, y3,…yn>。假如他们的最长公共子序列为Z=< z1, z2, z3,…zk>那么k就是我们需要求的长度。
由上面假设可以推出:
1)如果xm=yn,那么必有xm=yn=zk,且< x1,x2,x3,…xm-1>与< y1,y2,y3,…yn-1>的最长公共子序列为< z1, z2, z3,…zk-1>
2)如果xm!=zk,那么< z1, z2, z3,…zk>是< x1,x2,x3,…xm-1>与< y1, y2, y3,…yn>的最长公共子序列。
3)如果yn!=zk,那么< z1, z2, z3,…zk>是< x1,x2,x3,…xm>与< y1, y2, y3,…yn-1>的最长公共子序列。
由此可以逆推。于是有以下公式:
五、代码
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int strALeng, strBLeng;
while(cin >> strALeng >> strBLeng)
{
int charMatrix[101][101];
char charAAry[strALeng];
char charBAry[strBLeng];
for(int i = 0; i < strALeng; i++)
cin >> charAAry[i];
for(int i = 0; i < strBLeng; i++)
cin >> charBAry[i];
for(int i = 0; i < strALeng; i++)
charMatrix[i][0] = 0;
for(int i = 0; i < strBLeng; i++)
charMatrix[0][i] = 0;
for(int i = 1; i <= strALeng; i++)
{
for(int j = 1; j <= strBLeng; j++)
{
if(charAAry[i - 1] == charBAry[j - 1]) charMatrix[i][j] = charMatrix[i - 1][j - 1] + 1;
else charMatrix[i][j] = max(charMatrix[i][j-1], charMatrix[i - 1][j]);
}
}
cout << charMatrix[strALeng][strBLeng] << endl;
}
return 0;
}
<Sicily> Longest Common Subsequence的更多相关文章
- 动态规划求最长公共子序列(Longest Common Subsequence, LCS)
1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...
- LintCode Longest Common Subsequence
原题链接在这里:http://www.lintcode.com/en/problem/longest-common-subsequence/ 题目: Given two strings, find t ...
- [UCSD白板题] Longest Common Subsequence of Three Sequences
Problem Introduction In this problem, your goal is to compute the length of a longest common subsequ ...
- LCS(Longest Common Subsequence 最长公共子序列)
最长公共子序列 英文缩写为LCS(Longest Common Subsequence).其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已 ...
- Longest Common Subsequence
Given two strings, find the longest common subsequence (LCS). Your code should return the length of ...
- Longest Common Subsequence & Substring & prefix
Given two strings, find the longest common subsequence (LCS). Your code should return the length of ...
- Dynamic Programming | Set 4 (Longest Common Subsequence)
首先来看什么是最长公共子序列:给定两个序列,找到两个序列中均存在的最长公共子序列的长度.子序列需要以相关的顺序呈现,但不必连续.例如,"abc", "abg", ...
- Lintcode:Longest Common Subsequence 解题报告
Longest Common Subsequence 原题链接:http://lintcode.com/zh-cn/problem/longest-common-subsequence/ Given ...
- UVA 10405 Longest Common Subsequence (dp + LCS)
Problem C: Longest Common Subsequence Sequence 1: Sequence 2: Given two sequences of characters, pri ...
- [HackerRank] The Longest Common Subsequence
This is the classic LCS problem. Since it requires you to print one longest common subsequence, just ...
随机推荐
- Java推断类和实例的关系
通常我们使用instanceOf关键字来推断一个对象是否是类的实例,近期博主看到isInstance关键字,不解与instanceOf的差别,故度娘了一下,顺便涨了一下姿势. Java中推 ...
- node10---GET请求和POST请求的参数
GET请求的参数在URL中,在原生Node中,需要使用url模块来识别参数字符串.在Express中,不需要使用url模块了.可以直接使用req.query对象. ● POST请求在express中不 ...
- 洛谷P1339 [USACO09OCT]热浪Heat Wave(最短路)
题目描述 The good folks in Texas are having a heatwave this summer. Their Texas Longhorn cows make for g ...
- (转载)ExpandableListView 安卓二级菜单
ExpandableListView 安卓二级菜单 ExpandableListView可以显示一个视图垂直滚动显示两级列表中的条目,这不同于列表视图(ListView).ExpandableLi ...
- 51nod 1562 玻璃切割 (STL map+一点点的思考)
1562 玻璃切割 题目来源: CodeForces 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 现在有一块玻璃,是长方形的(w 毫米× h 毫米),现在要 ...
- sql 分割日期
datename(Year,CreateTime) ==2017 datename(Month,CreateTime) 7 1.获取星期(显示中文如:星期一) Select DateName( ...
- git pull 失败 ,提示:fatal: refusing to merge unrelated histories
首次 git pull 时失败,并提示:fatal: refusing to merge unrelated histories 在使用git pull 命令时,添加一个可选项 git pull or ...
- SpringBoot学习笔记(1)----环境搭建与Hello World
简介: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配 ...
- There is no 'root'@'%' registered解决
把别人机器上的MYSQL中的一个数据库导出来,生成了一个.sql的文件 在我的机器上导入这个.sql文件之后,在数据库连接时出现了如下错误: “There is no 'root'@'%' ...
- 原生的ajax请求----(播放托管到爱奇艺上的视频)
播放视频 $(function(){ //视频播放 $('.play-icon').click(function () { $.ajax({ type:"get", url: &q ...