动态规划二:最长公共子序列(LCS)
1.两个子序列:X={x1,x2....xm},Y={y1,y2....yn},设Z={z1,z2...zk}。
2.最优子结构:
1)如果xm=yn ,则zk=xm=yn且Zk-1是Xm-1和Yn-1的一个LCS。
2)如果xm!=yn ,则zk!=xm包含Z是Xm-1和Y的一个LCS。
3)如果xm!=yn ,则zk!=yn包含Z是X和Yn-1的一个LCS。
3.则由最优子结构可得递归式:
aaarticlea/png;base64,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" alt="" />
4.实现:
#include<string>
#include<iostream>
using namespace std; int arr[][] = {};
void LCS(string str1, string str2){
int len1 = str1.length();
int len2 = str2.length();
//边界
for (int i = ; i <= len1; i++)
arr[i][] = ;
for (int j = ; j <= len2; j++)
arr[][j] = ;
//检验
for (int i = ; i <= len1; i++)
{
for (int j = ; j <= len2; j++)
{
if (str1[i - ] == str2[j - ]) //记录
{
arr[i][j] = arr[i - ][j - ] + ;
}
else if (arr[i][j - ] >= arr[i - ][j])
{
arr[i][j] = arr[i][j - ];
}
else
{
arr[i][j] = arr[i - ][j];
}
}
}
} void printLCS(string str1, string str2,int len1, int len2){
cout << "最长公共子序列长为:" << arr[len1][len2] << endl;
//倒序输出
while (len1&&len2){
if (str1[len1-]==str2[len2-])
{
cout << str1[len1 - ];
len1--;
len2--;
}
else if (arr[len1][len2-]>=arr[len1-][len2])
{
len2--;
}
else{
len1--;
}
}
cout << endl;
} int main()
{
string str1 = "abcdsnnnn";
string str2 = "acbdanm";
LCS(str1, str2);
printLCS(str1, str2,str1.length(), str2.length());
return ;
}
动态规划二:最长公共子序列(LCS)的更多相关文章
- 动态规划之最长公共子序列LCS(Longest Common Subsequence)
一.问题描述 由于最长公共子序列LCS是一个比较经典的问题,主要是采用动态规划(DP)算法去实现,理论方面的讲述也非常详尽,本文重点是程序的实现部分,所以理论方面的解释主要看这篇博客:http://b ...
- 动态规划之最长公共子序列(LCS)
转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...
- C++版 - Lintcode 77-Longest Common Subsequence最长公共子序列(LCS) - 题解
版权声明:本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C++版 - L ...
- 编程算法 - 最长公共子序列(LCS) 代码(C)
最长公共子序列(LCS) 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 给定两个字符串s,t, 求出这两个字符串最长的公共子序列的长度. 字符 ...
- 1006 最长公共子序列Lcs
1006 最长公共子序列Lcs 基准时间限制:1 秒 空间限制:131072 KB 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdks ...
- POJ 1458 Common Subsequence(最长公共子序列LCS)
POJ1458 Common Subsequence(最长公共子序列LCS) http://poj.org/problem?id=1458 题意: 给你两个字符串, 要你求出两个字符串的最长公共子序列 ...
- 51Nod 1006:最长公共子序列Lcs(打印LCS)
1006 最长公共子序列Lcs 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). ...
- 51nod 1006 最长公共子序列Lcs 【LCS/打印path】
1006 最长公共子序列Lcs 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). ...
- 每日一题-——最长公共子序列(LCS)与最长公共子串
最长公共子序列(LCS) 思路: 代码: def LCS(string1,string2): len1 = len(string1) len2 = len(string2) res = [[0 for ...
- 51nod 1006:最长公共子序列Lcs
1006 最长公共子序列Lcs 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). ...
随机推荐
- hdu DIY FLIGHT GAME (dfs)
FLIGHT GAME Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total S ...
- [洛谷P2482][SDOI2010]猪国杀
题目大意:猪国杀,又一道大模拟题 题解:模拟,对于一个没有玩过三国杀的人来说,一堆细节不知道,写的十分吃力 卡点:无数,不想说什么了,这告诉我要多玩游戏 C++ Code: #include < ...
- [USACO07DEC]美食的食草动物Gourmet Grazers
---题面--- 题解: 首先观察题面,直觉上对于一头奶牛,肯定要给它配pi和qi符合条件的草中两者尽量低的草,以节省下好草给高要求的牛. 实际上这是对的,但观察到两者尽量低这个条件并不明确,无法用于 ...
- Linux和Windows上实现的异同-Linux的自适应ACK
上周有同事问,延迟ACK到底对应用层会产生什么后果,我也不知道该如何作答,于是丢了一个链接: TCP之Delay ACK在Linux和Windows上实现的异同-Linux的自适应ACK: 是的,这是 ...
- C++——OOP面向对象理解
从Rob Pike 的 Google+上的一个推看到了一篇叫<Understanding Object Oriented Programming>的文章,我先把这篇文章简述一下,然后再说说 ...
- BEGIN TRAN;
USE master Create Database TestDb on Primary ( name='TestDb_data', filename='G:\TempData\Db\TestDb_d ...
- Ajax缓存问题怎么解决?
项目有时要用一些Ajax的效果,因为比较简单,也就没有去用什么Ajax.net之类的东西,手写代码也就实现了.第二天,有人向我报告错误:说是只有第一次读取的值正常,后面的值都不正常:我调试了一下 ,确 ...
- is
MyType a = null; if (a is MyType) == False
- Sqlserver面试题
1.用一条SQL语句 查询出每门课都大于80分的学生姓名 name kecheng fenshu 张三 语文 81张三 数学 75李四 语文 ...
- tomcat:tomcat的OutOfMemoryError解决
最近在熟悉一个开发了有几年的项目,需要把数据库从mysql移植到oracle,首先把jdbc的连接指向 mysql,打包放到tomcat里面,可以跑起来,没有问题,可是当把jdbc连接指向oracle ...