YACS 2023年8月月赛 乙组 T2 最长回文 题解

题目链接

小清新的区间 DP 题。

看到数据范围以及回文一眼盯真得到是区间 DP。

f[i][j] 为区间 [i,j] 成为回文串最少要经过几次操作,转移一个个看。

首先可以删掉第 j 个,f[i][j]=min(f[i][j],f[i][j1]+1),同理也可以删掉第 i 个,f[i][j]=min(f[i][j],f[i+1][j]+1)

然后如果两端相等,也可以直接通过 f[i+1][j1] 过来,就这么结束了。

复制代码
#include<cstring>
#include<iostream>
using namespace std;
int f[2005][2005];
char s[2005];
int main(){
    memset(f,0x3f,sizeof f);
    cin>>s+1;
    int len=strlen(s+1);
    for(int i=1;s[i];i++)f[i][i]=0;
    for(int l=2;l<=len;l++){
        for(int i=1;i+l-1<=len;i++){
            int j=i+l-1;
            if(s[i]==s[j]){
                if(l==2)f[i][j]=0;
                else f[i][j]=f[i+1][j-1];
            }else f[i][j]=min(f[i][j-1],f[i+1][j])+1;
        }
    }
    cout<<f[1][len];
    return 0;
}
复制代码

 

posted @   Xy_top  阅读(64)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示