длинная палиндромная подстрока рекурсивный раствор

Мне известны решения, использующие подход динамического программирования снизу вверх для решения этой проблемы в O (n ^ 2). Я специально ищу подход сверху вниз дп. Можно ли получить самую длинную палиндромную подстроку с помощью рекурсивного решения?

Вот что я попробовал, но в некоторых случаях это не помогло, но я чувствую, что почти на правильном пути.

#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;
}

Ответы на вопрос(2)

Ваш ответ на вопрос