Код печатает самую длинную общую подпоследовательность.Я сделал это с памяткой.Но ответ неверный.Помогите, пожалуйста.
Первая строка - это длина массива
Следующие 2 строки - это последовательность
Например:
Ввод
5 6
1 2 3 4 1
3 4 1 2 1 3
Вывод
1 2 3
Или любой другой LCS длиной 3
Но мое решение дает ответ как
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";
}