最长公共子序列-jobdu-1402(附带打印--undo)

jobdu-1042:Coincidence

时间限制:1 秒

内存限制:32 兆

题目描述:

Find a longest common subsequence of two strings.

输入:

First and second line of each input case contain two strings of lowercase character a…z. There are no spaces before, inside or after the strings. Lengths of strings

do not exceed 100.

输出:

For each case, output k – the length of a longest common subsequence in one line.

样例输入:

abcd

cxbydz

样例输出:

2

来源:

2008年上海交通大学计算机研究生机试真题

最长公共子序列

打印:

最长公共子序列-jobdu-1402(附带打印--undo),码迷,mamicode.com

时间: 2024-10-06 03:45:35

最长公共子序列-jobdu-1402(附带打印--undo)的相关文章

最长公共子序列Lcs(打印路径)

给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列. Input 第1行:字符串A 第2行:字符串B (A,B的长度 <= 1000) Output 输出最长的子序列,如果有多个,随意输出1个. Input示例 abcicba abdkscab Output示例 abca #include <bits/stdc++.h> usin

最长公共子序列计算及打印

题目描述:从a,b俩数组中找出共有的最长子序列,如a={1,2,3,5,6,4,8},b={1,1,2,5,5,3,5,7,6,},其最长公共子序列为{1,2,3,5,6}. 解决方法:动态规划,寻找子问题,可以发现,当前的最长子序列一定等于上一次的加一,否则,就等于上一次的. 即:c[i][j]=0;               当i==0或j==0时 c[i][j]=c[i-1][j-1]+1.   当a[i]=b[j]时 c[i][j]=c[i-1][j].       当c[i-1][j

POJ 2250 Compromise(最长公共子序列)

题意:求两段文本的最长公共文本: 思路:最长公共子序列+打印公共序列: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int dp[505][505],num1,num2; char s[505][505],s1[505][505],s2[505][505]; void lcs(int a,int b) { if(a==0||b==0) return; if(s[a

动态规划之最长公共子序列(LCS)

tips : 本文内容是参考了很多著名博客和自己的思考得出的,如有不当欢迎拍砖. 先简单说一下动态规划 通俗地说:动态规划就是将一个可以划分为子问题的问题进行递归求解,不过动态规划将大量的中间结果保存起来, 不管它们是否会用得到,从而在后面的递归求解过程中可以快速求解.由此可以看得出来动态规划是一个以牺牲空间 为代价换取时间的算法. 对于最长公共子序列的题目不用多说,现在来分析一下LCS的动态规划解决思路: 一.首先先观察问题是否符合动态规划最明显的两个特征:最优子结构和重叠子问题 方便起见,以

算法——动态规划篇——最长公共子序列

问题描述      最长公共子序列,英文缩写为LCS(Longest Common Subsequence).其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列.       解决最长公共子序列,一种常用的办法,就是穷举法,组合出所有的情况,但是这样对于长序列的情况来说,是非常不实际.. 假设现在有两个序列,x[]={'A','B','C','B','D','A','B'};y[]={'B','D','C','A'

最长公共子序列(仅借助数组dp本身在O(m+n)时间内构造最长公共子序列)

算法课上机作业,想复杂了.. 给定2个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列. 改进LCS函数,不使用数组b而仅借助数组c本身在O(m+n)时间内构造最长公共子序列. 原来的代码: void LCSLength(char *x ,char *y,int m,int n, int **c, int **b) {        int i ,j;        for (i = 1; i <= m; i++) c[i][0] = 0;       

POJ 2250 Compromise (DP,最长公共子序列)

Compromise Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6440 Accepted: 2882 Special Judge Description In a few months the European Currency Union will become a reality. However, to join the club, the Maastricht criteria must be fulfille

【算法】 求最长公共子序列

最长公共子序列 算法这玩意儿我完全是外行,因为从头开始就不是这个专业的再加上从小就对逻辑性强的东西苦手..所以一直没什么机会也没什么兴趣学.去年刚开始学习了python的那段时间曾经碰到过几个算法比较高级的问题,当时觉得果然这不是我的能力能驾驭的了的..总之是先记录了下来,但是对于算法这块将来的拓展和进一步学习,其实我挺没信心的 = = 问题:最长公共子序列问题(Longest Common Sequence) 子序列是指一个字符串抽掉0到若干个字符后剩下的字符串,抽取的字符不一定相邻也不一定有

一天一道算法题(4)---最长公共子序列

题目 给定两个字符串str1和str2,返回两个字符串的最长公共子序列 解析 本题是非常经典的动态规划问题,先来介绍求解动态规划表的过程.如果str1的长度为M,str2的长度为N,生成大小为M*N的矩阵dp,行数为M,列数为N.dp[i][j]的含义是str1[0..i]和str2[0..j]的最长公共子序列的长度.从左到右,再从上到下计算矩阵dp. 1.矩阵dp第一列即dp[0..M-1][0],dp[i][0]的含义是str1[0..i]与str2[0]的最长公共子序列的长度. 2.矩阵d