首页 > 其他分享 >八重回文划分法:最多/最少 回文/非回文 子序列/子串 划分

八重回文划分法:最多/最少 回文/非回文 子序列/子串 划分

时间:2024-10-22 17:59:15浏览次数:7  
标签:子串 复杂度 八重 划分 最少 mathcal 回文

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

最少非回文子串划分

答案是 \(1\) 或 \(2\) 或者无解,参考 CF1951E 的题解。

时间复杂度:\(\mathcal O(n)\)。

最少非回文子序列划分

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

时间复杂度:\(\mathcal O(n)\)。

最少回文子串划分

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

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

时间复杂度:\(\mathcal O(n\log n)\)。

最少回文子序列划分

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

最多非回文子串划分

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

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

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

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

时间复杂度:\(\mathcal O(n)\)。

最多非回文子序列划分

P11190「KDOI-10」反回文串

时间复杂度:\(\mathcal O(n)\)。

最多回文子串划分

奶龙题,输出 \(n\)。

时间复杂度:\(\mathcal O(1)\)。

最多回文子序列划分

奶龙题,输出 \(n\)。

时间复杂度:\(\mathcal O(1)\)。

标签:子串,复杂度,八重,划分,最少,mathcal,回文
From: https://www.cnblogs.com/lemonniforever/p/18493236

相关文章

  • Mongodb(4)索引,查看执行计划,聚合操作aggregate,表关联查询,批量插入测试数据,执行计
    创建索引,支持:单键索引、复合索引,唯一索引创建索引后台执行db.books.createIndex({open:1,close:1},{background:true})对内嵌文档字段创建索引:db.books.createIndex({"author.name":1})创建唯一索引db.books.createIndex({title:1},{unique:true})在包含嵌套对象的......
  • 子网掩码划分的问题
    1ip地址分为网络位和主机位   总共32位     2   子网就是从主机地址借几位作为网络地址    假设子网为是x  则子网的个数是2的x次方,主机地址为y 则主机地址范围是2的y次方-2个2  题目  1.0.0.0/8的网络现在要求划分5个子网求......
  • 7-1 栈实现回文
    题目描述:输入一个字符串,判断该字符串是否为回文。回文就是字符串中心对称,从左向右读和从右向左读的内容是一样的。(不含空格)输入格式:先输入字符串的长度,不超过100个字符长度,回车,然后依次输入字符,以回车结束字符串输入。输出格式:如果输入字符串中含空格,则输入字符串后回车,显......
  • 七,JVM内存划分与参数传递
    Java编程基础:JVM内存划分与参数传递在Java编程中,了解Java虚拟机(JVM)的内存划分对于优化程序性能和资源管理至关重要。本文将详细探讨JVM内存的划分以及参数传递的机制,并提供图示以帮助理解。JVM内存划分JVM内存主要划分为以下几个区域:栈(Stack)局部变量:存储方法内部定义的局部......
  • 代码随想录算法训练营 | 647. 回文子串,516.最长回文子序列
    647.回文子串题目链接:647.回文子串文档讲解︰代码随想录(programmercarl.com)视频讲解︰回文子串日期:2024-10-19想法:本题精髓在于dp[i][j]表示的是s[i,j]这个子字符串是不是回文的,是Boolean类型,s[i]s[j]不等时,肯定不回文;s[i]s[j]相等时,开始看ij的大小,ij大小相等那么表示单个字......
  • P1435 [IOI2000] 回文字串
    尝试了几次发现添加的字符数等于n-正着的和反着的最长公共子序列的长度,即为答案。正序与倒序“公共”的部分就是我们回文的部分,如果把正序与倒序公共的部分减去你就会惊奇的发现剩余的字符就是你所要添加的字符,也就是所求的正解。点击查看代码#include<iostream>#include<st......
  • 每日OJ题_牛客_非对称之美_最长非回文字符串_C++_Java
    目录牛客_非对称之美_最长非回文字符串题目解析C++代码Java代码牛客_非对称之美_最长非回文字符串非对称之美(nowcoder.com)题目解析找到规律就是最长非回文字符串(判断是否全同->0,否则是n-1(回文减去1)或n)。C++代码#include<iostream>usingnamespacestd;int......
  • (算法)等差数列划分————<动态规划>
    1.题⽬链接:413.等差数列划分2.题⽬描述:3.解法(动态规划):算法思路:1.状态表⽰:由于我们的研究对象是「⼀段连续的区间」,如果我们状态表⽰定义成[0,i]区间内⼀共有多少等差数列,那么我们在分析dp[i]的状态转移时,会⽆从下⼿,因为我们不清楚前⾯那么多的「等差数列都在什......
  • zone的划分
    zone的划分 上图的意思就是:host1可以连存储,host2可以连存储,但是host1和host2不同(san层面不通)创建wwnzone  1:创建别名:     alicreate"Host01","20:01:00:0e:1e:d1:79:01"     alicreate"Host02","20:01:00:0e:1e:d1:79:00"       ......
  • 1283 回文日期 枚举 模拟 时间
    #include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintN=1e3+10;//每个月的天数,2月暂时设为29天,后续会根据闰年和平年调整inta[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};intmain(){ints1,s2,ans=0;cin>>......