最长公共子序列
2016-04-14 19:28
295 查看
[align=left]描述[/align]
一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切地说,若给定序列X=<x1, x2,…, xm>,则另一序列Z=<z1, z2,…, zk>是X的子序列是指存在一个严格递增的下标序列 <i1, i2,…, ik>,使得对于所有j=1,2,…,k有:
Xij = Zj
如果一个序列S即是A的子序列又是B的子序列,则称S是A、B的公共子序列。
求A、B所有公共子序列中最长的序列的长度。
[align=left]输入[/align]
输入共两行,每行一个由字母和数字组成的字符串,代表序列A、B。A、B的长度不超过200个字符。
[align=left]输出[/align]
一个整数,表示最长各个子序列的长度。
格式:printf("%d\n");
[align=left]输入样例[/align]
programming
contest
[align=left]输出样例[/align]
2
一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切地说,若给定序列X=<x1, x2,…, xm>,则另一序列Z=<z1, z2,…, zk>是X的子序列是指存在一个严格递增的下标序列 <i1, i2,…, ik>,使得对于所有j=1,2,…,k有:
Xij = Zj
如果一个序列S即是A的子序列又是B的子序列,则称S是A、B的公共子序列。
求A、B所有公共子序列中最长的序列的长度。
[align=left]输入[/align]
输入共两行,每行一个由字母和数字组成的字符串,代表序列A、B。A、B的长度不超过200个字符。
[align=left]输出[/align]
一个整数,表示最长各个子序列的长度。
格式:printf("%d\n");
[align=left]输入样例[/align]
programming
contest
[align=left]输出样例[/align]
2
#include <iostream> #include <algorithm> #include <cstring> using namespace std; char s1[210]; char s2[210]; int c[210][210]; //c[i][j]表示s1[1,i]和s2[1,j]的LCS int b[210][210]; //记录路径 void LCS(int m, int n) { for(int i = 1; i <= m; i++) { for(int j = 1; j <= n; j++) { if(s1[i-1] == s2[j-1]) //i,j从0开始 { c[i][j] = c[i-1][j-1]+1;//从对角 b[i][j] = 0; } else if(c[i-1][j] > c[i][j-1]) { c[i][j] = c[i-1][j]; //从上方 b[i][j] = 1; } else { c[i][j] = c[i][j-1]; //从左边 b[i][j] = -1; } } } } void Print(int i, int j) { if(i == 0 || j == 0) return; if(b[i][j] == 0) { Print(i-1, j-1); cout << s1[i-1] << endl; } else if(b[i][j] == 1) Print(i-1, j); else Print(i, j-1); } int main() { while(cin >> s1 >> s2) { memset(c, 0, sizeof(c)); memset(b, 0, sizeof(b)); int m = strlen(s1); int n = strlen(s2); LCS(m, n); //Print(m, n); cout << c[m] << endl; } }
相关文章推荐
- 细说exports和module.exports
- UIScrollView基本用法和代理方法
- 0414-复利计算再升级
- css sprite 图片整合处理技术(精灵技术)
- 【补充】deferred.then()的理解
- 链表分割
- Linux下安装Oracle,Tuxedo出错
- Spring MVC 文件上传的MaxUploadSizeExceededException异常处理
- 配置eclipse内存
- C#实现优先队列 基于二叉堆 附使用案例
- eclipse 打jar包并混淆
- MAC下的pycharm 设置显示行号
- 复利计算- 结对2.0--复利计算WEB升级版
- redis 数据类型详解 以及 redis适用场景场合
- C++ string类的实现
- int、long、long long取值范围
- ZOJ-3935-2016
- 用 shell 抠取文本中指定内容
- TCP/IP协议--TCP的交互数据流和成块数据流
- bzoj 4066: 简单题 k-d tree