#include <iostream>
#include <string>
using namespace std;
const int maxn=100;
int max(int i,int j)
{
return i>j?i:j;
}
string s1,s2;
int d[maxn][maxn];
//记忆化搜索
void dfs(int i,int j)
{
if(i>=s1.size()||j>=s2.size())
return;
else if(s1[i]==s2[j])
d[i+1][j+1]=d[i][j]+1;
else
d[i+1][j+1]=max(d[i][j+1],d[i+1][j]);
dfs(i+1,j);
dfs(i,j+1);
}
//运用DP来做
void dfs2()
{
for(int i=0;i<s1.size();i++)
{
for(int j=0;j<s2.size();j++)
{
if(s1[i]!=s[j])
d[i+1][j+1]=max(d[i][j+1],d[i+1][j]);
else
d[i+1][j+1]=d[i][j]+1;
}
}
}
int main()
{
for(int i=0;i<maxn;i++)
{
for(int j=0;j<maxn;j++)
d[i][j]=0;
}
cin>>s1>>s2;
dfs(0,0);
//dfs2();
cout<<d[s1.size()][s2.size()];
return 0;
}
最长公共子序列,记忆化搜索
最新推荐文章于 2024-06-09 14:21:24 发布