公共子序列
描述
一个给定序列的子序列给定的序列与一些元素(可能没有)。给定一个序列X =另一个序列Z =是X的子序列,如果存在一个严格递增序列X这样的指数j = 1,2,…k xij = zj。例如,Z =的子序列X =与指数序列< 1、2、4、6 >。给定两个序列X和Y的问题是找到最长公共子序列的长度的X和Y。
输入
程序输入从一个文本文件。文件包含两个字符串中的每个数据集表示给定的序列。序列由任意数量的空白。输入数据是正确的。字符串的长度小于1000。
输出
对于每一组数据程序输出的标准输出最长公共子序列的长度从一开始的一个单独的行。
样例输入
abcfbc abfcab
programming contest
abcd mnp
样例输出
4
2
0
动态规划:最长公共子序列
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[1100],b[1100];
int dp[1100][1100];
int main()
{
while(scanf("%s %s",a,b)!=EOF)
{
int x=strlen(a);
int y=strlen(b);
for(int i=1;i<=x;i++)
{
for(int j=1;j<=y;j++)
{
if(a[i-1]==b[j-1])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
cout<<dp[x][y]<<endl;
}
return 0;
}