Common Subsequence
TimeLimit: 2000/1000 MS(Java/Others)Total Submission(s):11711
Problem Description
A subsequence of a given sequence is the given sequence with someelements (possible none) left out. Given a sequence X =<x1, x2, ..., xm> another sequence Z= <z1, z2, ..., zk> is a subsequenceof X if there exists a strictly increasing sequence<i1, i2, ..., ik> of indices of Xsuch that for all j = 1,2,...,k, xij = zj. For example, Z =<a, b, f, c> is a subsequence of X =<a, b, c, f, b, c> with indexsequence <1, 2, 4, 6>. Given twosequences X and Y the problem is to find the length of themaximum-length common subsequence of X andY.
The program input is from a text file. Each data set in the filecontains two strings representing the given sequences. Thesequences are separated by any number of white spaces. The inputdata are correct. For each set of data the program prints on thestandard output the length of the maximum-length common subsequencefrom the beginning of a separateline.
The program input is from a text file. Each data set in the filecontains two strings representing the given sequences. Thesequences are separated by any number of white spaces. The inputdata are correct. For each set of data the program prints on thestandard output the length of the maximum-length common subsequencefrom the beginning of a separateline.
Sample Input
abcfbcabfcab programming contest abcd mnp
Sample Output
4 20
Source
Recommend
Ignatius
#include<iostream>
#include <stdio.h>
#include<algorithm>
#include <string>
#include<string.h>
#include<stdlib.h>
#include <math.h>
#define MAXLEN 500
using namespace std;
void lcs(char *x,char *y,int m,int n,int c[][MAXLEN]){
int i,j;
for(i=0;i<m;i++)
c[i][0]=0;
for(i=0;i<n;i++)
c[0][i]=0;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++){
if(x[i-1]==y[j-1])
c[i][j]=c[i-1][j-1]+1;
else if(c[i-1][j]>c[i][j-1])
c[i][j]=c[i-1][j];
else
c[i][j]=c[i][j-1];
}
printf("%d\n",c[m][n]);
}
int main(){
intc[MAXLEN][MAXLEN];
char x[MAXLEN],y[MAXLEN];
int m,n;
while (~scanf("%s%s",x,y)) {
m=strlen(x);
n=strlen(y);
lcs(x,y,m,n,c);
}
return 0;
}