Ich bin mir der Lösungen bewusst, die den Bottom-up-Ansatz zur dynamischen Programmierung verwenden, um dieses Problem in O (n^2) zu lösen. Ich suche speziell nach einem Top-Down-DP-Ansatz. Ist es möglich, mit einer rekursiven Lösung die längste palindromische Teilkette zu erhalten?längste palindromische Teilzeichenfolge rekursive Lösung
Hier ist, was ich versucht habe, aber es scheitert für bestimmte Fälle, aber ich fühle mich fast auf dem richtigen Weg.
#include <iostream>
#include <string>
using namespace std;
string S;
int dp[55][55];
int solve(int x,int y,int val)
{
if(x>y)return val;
int &ret = dp[x][y];
if(ret!=0){ret = val + ret;return ret;}
//cout<<"x: "<<x<<" y: "<<y<<" val: "<<val<<endl;
if(S[x] == S[y])
ret = solve(x+1,y-1,val+2 - (x==y));
else
ret = max(solve(x+1,y,0),solve(x,y-1,0));
return ret;
}
int main()
{
cin >> S;
memset(dp,0,sizeof(dp));
int num = solve(0,S.size()-1,0);
cout<<num<<endl;
}
Bug bei if (ret! = 0) {ret = val + ret; return ret;} Linie, entferne sie und sehe ans. Kleine Eingabe und manuell prüfen. Add if (ret! = 0) Rückgabewert val + ret; – Dharmesh