该代码显示最长公共子序列。我已经完成了记忆。但是答案是错误的。请帮忙。
第一行是数组的长度
接下来的两行是序列
例如:
输入
5 6
1 2 3 4 1
3 4 1 2 1 3
输出
1 2 3
或其他任何长度为3的LCS
但是我的解决方案给出了答案
3 4 1 2 1
我的代码:
#include<bits/stdc++.h>
using namespace std;
vector<int> lcs(int a[],int b[],int n,int m, unordered_map<string ,vector<int> > &map1){
vector<int>v;
vector<int>v1;
vector<int>v2;
if(n<0||m<0)
{
return v;
}
stringstream na;
na<<n;
string n1=na.str();
stringstream ma;
ma<<m;
string m1=ma.str();
string num =n1 + "#" + m1;
if(map1.find(num)!=map1.end())
return map1[num];
if(a[n]==a[m]){
v1=lcs(a,b,n-1,m-1,map1);
v1.push_back(a[n]);
map1[num]=v1;
return v1;
}
v1=lcs(a,b,n-1,m,map1);
v2=lcs(a,b,n,m-1,map1);
v1.size()>v2.size() ? map1[num]=v1 : map1[num]=v2;
return map1[num];
}
int main(){
int t;
int n,m;
cin>>n>>m;
int *a=new int[n];
int *b=new int[m];
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<m;i++)
cin>>a[i];
vector<int>v;
unordered_map<string,vector<int> > map1;
v=lcs(a,b,n-1,m-1,map1);
for(int i=0;i<v.size();i++)
cout<<v[i]<<" ";
cout<<"\n";
}