1210: 最长公共子序列
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 10 Solved: 8
[ Submit][ Status][ Web Board]
Description
给出两个字符串,求出这样的一个最长的公共子序列的长度:子序列中的每个字符都能在两个原串中找到,而且每个字符的先后顺序和原串中的先后顺序一致。
如:
ABCBDAB
BDCABA
它们的最长公共子序列就是 BCBA,长度为4。
Input
每组两个长度小于100的字符串。
Output
输出最长公共子序列的长度。
Sample Input
ABCBDAB BDCABA
Sample Output
4
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int main()
{
string str1,str2;
int dp[200][200];
while(cin>>str1>>str2)
{
memset(dp,0,sizeof(dp));
int la = str1.length();
int lb = str2.length();
for(int i = 1; i <= la; i++)
for(int j = 1; j <= lb; j++)
{
if(str1[i - 1] == str2[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[la][lb]<<endl;
}
return 0;