Jestem świadomy rozwiązań, które używają oddolnego programowania dynamicznego, aby rozwiązać ten problem w O (n^2). W szczególności szukam podejścia od góry do dołu. Czy możliwe jest uzyskanie najdłuższego substratu palindromowego za pomocą rekurencyjnego rozwiązania?najdłuższe rozwiązanie rekurencyjne podstrukturowania palindromowego
Oto, co próbowałem, ale w niektórych przypadkach się nie udało, ale czuję, że jestem na dobrej drodze.
#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;
}
błędów w if (ret! = 0) {ret = val + ret; return ret;} line, usuń go i zobacz ans. Małe wejście i sprawdź ręcznie. Dodaj, jeśli (ret! = 0) return val + ret; – Dharmesh