最长公共子序列,记忆化搜索

来源:互联网 发布:怎么增强JS的兼容性 编辑:程序博客网 时间:2024/06/05 04:00
#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;}
0 0
原创粉丝点击