十重回文划分法:最多/最少(非平凡)回文/非回文 子序列/子串 划分

只考虑常数字符集,所以关于字符集的复杂度都没算进来。

最少非回文子串划分

答案是 12 或者无解,参考 CF1951E 的题解。

时间复杂度:O(n)

最少非回文子序列划分

考虑最少非回文子串划分的情况,可以发现答案是 2 的情况也不可能划分成 1 个子序列,所以和上面是一样的。

时间复杂度:O(n)

最少回文子串划分

容易有一个 O(n2) dp,这个 dp 可以用 PAM slink 优化做到 O(nlogn)。参考做法是 CF932G,这个题是数偶回文划分的方案数(当然要先用一步倒着间隔插的 trick 把 border 划分转回文划分),可以直接改成数回文划分的 min

网上介绍这个的资料很多。

时间复杂度:O(nlogn)

最少回文子序列划分

目前的一些进展:

  • 一个字符串的最长回文子序列的长度是它和反串的 LCS 长度(存疑,但是没有找到反例)。
  • 每次找出最长回文子序列删去继续找,可以得到最小划分(存疑,倾向于不正确)。
  • 显然不能区间 dp。
  • 答案显然不超过字符集大小。

这个真的有小于指数级的做法吗……

尝试了网络流,也无法解决。

事实上 clj 在 2013 年的 HDU 多校出了这题 HDU4628 Pieces,复杂度只做到了直接子集 dp 的 O(3n)

最多非回文子串划分

贪着做,两个字符不相同就在后一个字符后面划一下,这样最后可能会剩下一段,前面的都形如 aaaaab。显然这样做是上界,因为一个非回文子串至少需要两个不同的字符。

这样的问题是最后一段不一定能合进去还保证最后一个串非回文。你考虑倒着再做一遍。如果还不行的话就要考虑调整方案了。

此时可以发现,最后三个划分合并在一起一定要么不是回文串,要么不可能是一个除中间外都相同的 aaabaaa 式的回文串,按照最少非回文串划分的结论,这种一定回文串一定可以切分成两个非回文串,所以答案就减掉一。

大概需要特判一下初始划分数 2 的情况。

时间复杂度:O(n)

最多非回文子序列划分

P11190「KDOI-10」反回文串

时间复杂度:O(n)

最多回文子串划分

奶龙题,输出 n

时间复杂度:O(1)

最多非平凡回文子串划分

不允许串全为同一个字符。

还没想。

最多回文子序列划分

奶龙题,输出 n

时间复杂度:O(1)

最多非平凡回文子序列划分

不允许串全为同一个字符。

还没想。

posted @   Shunpower  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示