Common Subsequence
2016-07-12 13:30
399 查看
Description
A subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = < x1, x2, ..., xm > another sequence Z = < z1, z2, ..., zk > is a subsequence of X if there exists a strictly increasing sequence < i1,
i2, ..., ik > of indices of X such that for all j = 1,2,...,k, x ij = zj. For example, Z = < a, b, f, c > is a subsequence of X = < a, b, c, f, b, c > with index sequence < 1, 2, 4, 6 >. Given two sequences X and Y the problem is to find
the length of the maximum-length common subsequence of X and Y.
Input
The program input is from the std input. Each data set in the input contains two strings representing the given sequences. The sequences are separated by any number of white spaces. The input data are correct.
Output
For each set of data the program prints on the standard output the length of the maximum-length common subsequence from the beginning of a separate line.
Sample Input
Sample Output
裸的LCS,典型的动态规划。
当x[i]=z[j]时,dp(i,j)=d(i-1,j-1)+1;否则,dp(i,j)=max(dp(i-1,j),dp(i,j-1))。
#include<iostream>
#include<string>
using namespace std;
int dp[10005][10005];
string x,z;
void LCS(int n,int m);
int main(){
while(cin>>x>>z){
LCS(x.length(),z.length());
cout<<dp[x.length()][z.length()]<<endl;
}
return 0;
}
void LCS(int n,int m){
int i,j;
for(i=0;i<=n;i++){
dp[i][0]=0;
}
for(j=0;j<=m;j++){
dp[0][j]=0;
}
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
if(x[i-1]==z[j-1]) dp[i][j]=dp[i-1][j-1]+1;
else dp[i][j]=dp[i][j-1]>=dp[i-1][j]?dp[i][j-1]:dp[i-1][j];
}
}
}
A subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = < x1, x2, ..., xm > another sequence Z = < z1, z2, ..., zk > is a subsequence of X if there exists a strictly increasing sequence < i1,
i2, ..., ik > of indices of X such that for all j = 1,2,...,k, x ij = zj. For example, Z = < a, b, f, c > is a subsequence of X = < a, b, c, f, b, c > with index sequence < 1, 2, 4, 6 >. Given two sequences X and Y the problem is to find
the length of the maximum-length common subsequence of X and Y.
Input
The program input is from the std input. Each data set in the input contains two strings representing the given sequences. The sequences are separated by any number of white spaces. The input data are correct.
Output
For each set of data the program prints on the standard output the length of the maximum-length common subsequence from the beginning of a separate line.
Sample Input
abcfbc abfcab programming contest abcd mnp
Sample Output
4 2 0
裸的LCS,典型的动态规划。
当x[i]=z[j]时,dp(i,j)=d(i-1,j-1)+1;否则,dp(i,j)=max(dp(i-1,j),dp(i,j-1))。
#include<iostream>
#include<string>
using namespace std;
int dp[10005][10005];
string x,z;
void LCS(int n,int m);
int main(){
while(cin>>x>>z){
LCS(x.length(),z.length());
cout<<dp[x.length()][z.length()]<<endl;
}
return 0;
}
void LCS(int n,int m){
int i,j;
for(i=0;i<=n;i++){
dp[i][0]=0;
}
for(j=0;j<=m;j++){
dp[0][j]=0;
}
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
if(x[i-1]==z[j-1]) dp[i][j]=dp[i-1][j-1]+1;
else dp[i][j]=dp[i][j-1]>=dp[i-1][j]?dp[i][j-1]:dp[i-1][j];
}
}
}
相关文章推荐
- iOS控件之UITextView字数控制以及占位符的实现
- eclispe Dynamic Web Module 3.1 requires Java 1.7 or newer
- android build system
- iOS 解决在Storyboard中修改UITableViewCell背景色无效果的问题
- Common Subsequence (poj 1458) 最长公共子序列
- PHP SplQueue 队列简介
- UIView 的渐变色呈现
- [LintCode] Segment Tree Build II 建立线段树之二
- finished with non-zero exit value 1问题解决
- Mac下 Ionic 项目打包步骤
- UE4角色受击动画,随机播放音效
- UIView的layoutSubviews和drawRect方法何时调用
- butterknife报错 cannot find method "value" cannot resolve symbol
- Access restriction:The type JPEGCodec is not accessible due to restriction问题解决
- 自定义UILabel,具有居上/居下/居中的功能
- 304. Range Sum Query 2D - Immutable
- STL序列式容器之优先队列——priority_queue
- IOS基础之UILineBreakModeWordWrap
- tableView 显示时自动滑动到最后一条
- GPUImage使用教程