传统递归,时间复杂度O(2^n)
本demo时间复杂度O(n*m) 空间复杂度O(n*m)
#include<iostream>
#include<vector>
using namespace std;
#define max2(a,b) ((a)>(b)?(a):(b))
vector<vector<int>> dp;
vector<vector<char>> idDp;
template <typename T>
void printFun(vector<T> &obj)
{
for (vector<T>::iterator it = obj.begin(); it != obj.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void printLCS(int i, int j, char* obj)
{
switch (idDp[i][j])
{
case 'Q'://来自于左上
printLCS(i - 1, j - 1, obj);
cout << obj[i-1] << " ";
break;
case 'W'://来自于上
printLCS(i - 1, j, obj);
break;
case 'A'://来自于左
printLCS(i, j - 1, obj);
break;
default:
break;
}
}
int LCS(char *A, char *B, int n, int m)
{
dp.resize(n+1);
idDp.resize(n+1);
int max = 0;
for (size_t i = 0; i < n+1; i