题目链接:http://oj.daimayuan.top/course/5/problem/137
ps:虽然这题用manacher/KMP/EXKMP都可以做,且还能优化..但是还是可以讲一下DP版本的..
我们定义DP[i][j]:区间[i,j]是一个回文串。即长度:j-i+1
代码:
#include <bits/stdc++.h>
const int N=2e6+10;
using namespace std;
int a[N];
bool dp[1001][1001];
inline void solve(){
int n,mx=-1;cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int j=1;j<=n;j++){
for(int i=1;i<=j;i++){
if(j-i<=1) dp[i][j]=(a[i]==a[j]);
else dp[i][j]=(a[i]==a[j]&&dp[i+1][j-1]);
if(dp[i][j]&&mx<j-i+1){
mx=j-i+1;
}
}
}
cout<<mx;
}
signed main(){
solve();
}