#include<iostream>
#include<vector>
#include<iterator>
#include<algorithm>
#include<string>
using namespace std;
/*
*最长公共子序列(递归法)
*/
vector<vector<int>> b;//b[i][j]记录c[i][j]的值是由哪一个子问题的解得到的
int LCSLength(string m,string n,int Finedx,int Sindex)
{
if(Finedx == 0 || Sindex == 0) return 0;
if (m[Finedx-1] == n[Sindex-1])
{
b[Finedx][Sindex] = 1;
return LCSLength(m,n,Finedx-1,Sindex-1) + 1;
}else
{
int ini = LCSLength(m,n,Finedx-1,Sindex);
int inj = LCSLength(m,n,Finedx,Sindex-1);
if (ini>=inj)
{
b[Finedx][Sindex] = 2;
return ini;
}
else
{
b[Finedx][Sindex] = 3;
return inj;
}
}
}
void PrintRes(string m,int i,int j)
{
if(i == 0 || j == 0) return;
if(b[i][j] == 1)
{
PrintRes(m,i-1,j-1);
cout<<m[i-1];
}
else
{
if(b[i][j] == 2) PrintRes(m,i-1,j);
else
{
Pri
最长公共子序列(递归法)
最新推荐文章于 2023-05-11 23:48:22 发布