dp[i][j]=dp[i-1][j-1]+1 (s1[i]==s2[j])
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
using namespace std;
int dp[205][205]={0};
int main() {
string s1,s2;
cin>>s1>>s2;
for(int i=0;i<s1.size();i++)
{
for (int j=0; j<s2.size(); j++) {
if(s1[i]==s2[j])
dp[i+1][j+1]=dp[i][j]+1;
else
dp[i+1][j+1]=max(dp[i][j+1],dp[i+1][j]);
}
}
printf("%d\n",dp[s1.size()][s2.size()]);
// insert code here...
//std::cout << "Hello, World!\n";
return 0;
}
本文介绍了一种求解两个字符串最长公共子序列问题的经典动态规划算法。通过使用二维动态规划表格,该算法能有效地找出两个字符串之间的最长公共子序列长度。

4077

被折叠的 条评论
为什么被折叠?



