当前位置: 代码迷 >> 综合 >> 1040. 最长回文子串 dp
  详细解决方案

1040. 最长回文子串 dp

热度:37   发布时间:2023-12-06 11:26:01.0

在这里插入图片描述
样例:
input:
3
abc
abbab
ababbbac
output:
case #0:
1
case #1:
4
case #2:
5
思路:
emmm在dp方面真的是个蒟蒻,啥也不会…
状态转移方程:
cnt[i][j]=cnt[i+1][j-1]

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
const int maxn=222;
int n;
char a[maxn],cnt[maxn][maxn];
void palindrome(char a[])
{
    int l=strlen(a);for(int i=0;i<l;i++){
    if(a[i]==a[i+1]){
    cnt[i][i+1]=1;cnt[i+1][i]=1;}cnt[i][i]=1;}int cntt=1;for(int i=l-2;i>=0;i--){
    for(int j=i+1;j<l;j++){
    if(a[i]!=a[j]) cnt[i][j]=0;else{
    cnt[i][j]=cnt[i+1][j-1];if(cnt[i][j]){
    cntt=max(cntt,j-i+1);//cout<<"i="<<i<<" "<<"j="<<j<<" "<<"cnt="<<cntt<<endl;} }}}cout<<cntt<<endl;
}
int main()
{
    cin>>n;for(int i=1;i<=n;i++){
    cin>>a;cout<<"case #"<<i-1<<":"<<endl;//cout<<a<<endl;palindrome(a);}return 0;
}