2.6基本算法之动态规划 /1808:公共子序列
2017-11-06 20:46
183 查看
总时间限制:
1000ms 内存限制: 65536kB 描述我们称序列Z = < z1, z2, ..., zk >是序列X = < x1, x2,
..., xm >的子序列当且仅当存在 严格上升 的序列< i1, i2, ..., ik >,使得对j
= 1, 2, ... ,k, 有xij = zj。比如Z = < a, b, f, c > 是X = < a, b, c, f, b, c >的子序列。
现在给出两个序列X和Y,你的任务是找到X和Y的最大公共子序列,也就是说要找到一个最长的序列Z,使得Z既是X的子序列也是Y的子序列。
输入输入包括多组测试数据。每组数据包括一行,给出两个长度不超过200的字符串,表示两个序列。两个字符串之间由若干个空格隔开。输出对每组输入数据,输出一行,给出两个序列的最大公共子序列的长度。样例输入
样例输出
1000ms 内存限制: 65536kB 描述我们称序列Z = < z1, z2, ..., zk >是序列X = < x1, x2,
..., xm >的子序列当且仅当存在 严格上升 的序列< i1, i2, ..., ik >,使得对j
= 1, 2, ... ,k, 有xij = zj。比如Z = < a, b, f, c > 是X = < a, b, c, f, b, c >的子序列。
现在给出两个序列X和Y,你的任务是找到X和Y的最大公共子序列,也就是说要找到一个最长的序列Z,使得Z既是X的子序列也是Y的子序列。
输入输入包括多组测试数据。每组数据包括一行,给出两个长度不超过200的字符串,表示两个序列。两个字符串之间由若干个空格隔开。输出对每组输入数据,输出一行,给出两个序列的最大公共子序列的长度。样例输入
abcfbc abfcab programming contest abcd mnp
样例输出
4 2 0
#include<cstdio> #include<cstring> #include<iostream> using namespace std; int main() { int i,j,c[202][202]={0},la,lb; char a[201],b[201]; while(scanf("%s%s",a+1,b+1)!=EOF) { la=strlen(a+1);lb=strlen(b+1); for(i=1;i<=la;i++) for(j=1;j<=lb;j++) { if(a[i]==b[j])c[i][j]=c[i-1][j-1]+1; else c[i][j]=max(c[i-1][j],c[i][j-1]); } cout<<c[i-1][j-1]<<endl; } return 0; }
相关文章推荐
- 1808:公共子序列(2.6基本算法之动态规划)
- 2728:摘花生(2.6基本算法之动态规划)
- 8462:大盗阿福(2.6基本算法之动态规划)
- 2989:糖果(2.6基本算法之动态规划)
- 3531:判断整除(2.6基本算法之动态规划)
- 2718:移动路线(2.6基本算法之动态规划)
- NOI/ 2.6基本算法之动态规划 【7627】鸡蛋的硬度
- 算法学习之路:动态规划-最大公共子序列-java实现
- 7627:鸡蛋的硬度(2.6基本算法之动态规划)
- 1996:登山(2.6基本算法之动态规划)
- [OpenJudge] 2.6基本算法之动态规划 摘花生
- 1481:Maximum sum(2.6基本算法之动态规划)
- NOI2.6基本算法之动态规划 踩方格 分析----标志物的作用
- 2985:数字组合(2.6基本算法之动态规划)
- 3531:判断整除(2.6基本算法之动态规划)
- 【openjudge 2.6基本算法之动态规划】(合集)
- 2.6基本算法之动态规划 7624:山区建小学——区间DP
- 【openjudge 9275】[2.6基本算法之动态规划][Usaco2009 Feb]Bullcow(dp)
- 2988:计算字符串距离(2.6基本算法之动态规划)
- 动态规划:最长上升子序列之基础(经典算法 n^2)