Sono a conoscenza di soluzioni che utilizzano l'approccio di programmazione dinamico bottom-up per risolvere questo problema in O (n^2). Sto specificatamente cercando un approccio top down down. È possibile ottenere una sottostringa palindromica più lunga utilizzando una soluzione ricorsiva?soluzione ricorsiva di sottostringa palindromica più lunga
Ecco cosa ho provato ma non riesce in alcuni casi, ma sento che sono quasi sulla strada giusta.
#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;
}
dell'insetto a se (ret! = 0) {ret = val + ret; return ret;} riga, rimuoverlo e vedere ans. Piccolo input e controllo manuale. Aggiungi se (ret! = 0) restituisce val + ret; – Dharmesh