0%

2025-ICPC-Asia-Taiwan-Online-台湾网络赛-D. Palindromic Distance(字符串与回文串之间的最短距离)(不要那么死板,dp 的转移顺序是可以变的)

题目大意

两个字符串uuvv之间的编辑距离是将uu转换为vv的最小编辑操作次数。可以对字符串应用三种编辑操作:插入字符,删除字符,用不同字符替换某个字符。

例如,我们可以用四次替换将hello转换为world,因此编辑距离最多为44。您可以用两次替换和一次插入将wally转换为walter,因此编辑距离最多为33。计算两个字符串之间的编辑距离是一个众所周知的问题,有许多应用。

当前任务是计算一个字符串到最接近的回文串的编辑距离。回文串是从后往前读和从前往后读相同的字符串,例如madam。

hello到最接近回文串的编辑距离仅为22:我们可以用两次编辑操作将hello转换为ollo,或hllh,或elle。

编写一个程序,可以找到一个单词到最接近回文串的距离。

思路讲解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
auto dfs=[&](auto && self,ll l,ll r) -> ll {
if (r==l) {
return 0;
}
if (r-l==1) {
return s[l]!=s[r];
}
if (dp[l][r]!=INF) {
return dp[l][r];
}
dp[l][r]=min({self(self,l+1,r-1)+(s[l]!=s[r]), // 替换
self(self,l,r-1)+1, // 删除右侧(等价于左侧插入一个相同的抵消)
self(self,l+1,r)+1, // 删除左侧(等价于在右侧插入一个相同的)
});
return dp[l][r];
};

AC代码

AC
https://codeforces.com/gym/106084/submission/361098919

心路历程(WA,TLE,MLE……)