/*
输入:两个字符串
输出:最长公共子序列
算法思想:自顶向下的做备忘录,递归
*/
#include <iostream>
#include <cstring>
using namespace std;
string x,y;
int c[100][100];
int b[100][100];
int inf = 0x7fff; //int最大2^15-1
//int xx,yy; //特别注意!!递归函数内部用到的变量不能声明为全局变量,而应该每次递归定义一次!!
int lookup_LCS(string x,string y,int i,int j)
{
if(c[i][j]<inf) //若已经填表,直接返回表项值,不必重新计算
return c[i][j];
if(x[i-1]==y[j-1])
{
c[i][j]=lookup_LCS(x,y,i-1,j-1)+1; //递归计算
b[i][j]=0;
}
else
{
int xx=lookup_LCS(x,y,i-1,j);
int yy=lookup_LCS(x,y,i,j-1);
//c[i][j]=max(xx,yy);
if(xx>=yy)
{
c[i][j]=xx;
b[i][j]=1;
}
else
{
c[i][j]=yy;
b[i][j]=-1;
}
}
return c[i][j];
}
int memoized_LCS(string x,stri
LCS的做备忘录算法
最新推荐文章于 2024-06-11 16:56:33 发布