首页 > 其他分享 >半回文串(dp套dp)

半回文串(dp套dp)

时间:2024-08-23 20:39:04浏览次数:10  
标签:次数 枚举 字符串 变成 dp 回文

第4题     半回文串 查看测评数据信息

给定一个长度为n的只含小写英文字母的字符串S和一个整数k,请你将S分成k个子字符串,使得每个子字符串变成半回文串需要修改的字符数目最少。请你返回一个整数,表示需要修改的最少字符数目。

下面定义什么事半回文串:如果一个字符串从左往右和从右往左读是一样的,那么它是一个回文串。如果长度为len的字符串存在一个满足1<=d<len的正整数d,1en%d=0成立且所有对d做除法余数相同的下标对应的字符连起来得到的字符串都是回文串,那么我们说这个字符串是半回文串。比方说"aa","aba","adbgad"和"abab"都是半回文串,而”a”,"ab"和"abca"不是。子字符串指的是一个字符串中一段连续的字符序列。

输入格式

 

第一行一个长度是n的字符串S

第二行一个整数k

2<=n<=200,1<=k<=n/2

 

输出格式

 

一个整数

 

输入/输出例子1

输入:

abcac

2

 

输出:

1

 

样例解释

 我们可以将S分成子字符串"ab"和"cac"。子字符串"cac"已经是半回文串。如果我们将"ab"变成"aa",它也会变成个d=1的半回文串。该方案是将S分成2个子字符串的前提下,得到2个半回文子字符串需要的最少修改次数。所以答案为1。

 

dp套dp是什么


做题目先搞第一个dp,但是光凭第一个dp可能搞不完,中间再用第二个dp预处理一些值,再继续第一个dp继续做。

第二个dp可能是线性的等等的。

又或者说是先预处理一个dp,然后再进行第二个dp。

反正不是真正意义上的dp“套”dp

 

这题咋做


做法1

f(i, j) 表示枚举到第i位,j表示枚举的这个字符串的头部在哪,头是j,尾是i,也就是字符串中的j~i

对于每个字符串,枚举约数,变成很多段,每一段用贪心求出变成回文串次数,总次数就出来了,然后取一个总最小次数,也就是整个字符串最小次数

这里跟做法2差不多,没做法1的代码和详解,我们直接看做法2

 

 

做法2
直接把一串字符串变成k个半回文很难搞,用大局观。

f(i, j): 当前考虑到第i个字符,恰好划分成j段
转移:
枚举k,才知道第j段从哪开始

f(i, j)=f(k-1, j-1)+(k~i)这一段变成半回文的花费

O(n^3)

预处理 k~i 变成半回文的花费
g(i, j),i到j这一段字符变成半回文需要花费

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:次数,枚举,字符串,变成,dp,回文
From: https://www.cnblogs.com/didiao233/p/18377047

相关文章

  • 线性dp:编辑距离
    编辑距离本题与力扣72.编辑距离题意一样,阅读完本文可以尝试leetcode72.力扣题目链接题目叙述输入两个字符串a,b。输出从字符串a修改到字符串b时的编辑距离输入NOTVLOVER输出4题目解释:动态规划思路这个问题显然是一个最优解问题,我们可以考虑动态规划的思路,那么我......
  • 计算机网络——TCP协议与UDP协议详解(下)
    一、TCP协议1.1TCP协议的报文TCP全称为"传输控制协议(TransmissionControlProtocol")。人如其名,要对数据的传输进行一个详细的控制。我们先看其报文格式,如下图:TCP报文由以下几个字段组成:源端口号和目标端口号:每个TCP连接都有一个源端口号和一个目标端口号。源端口号......
  • 代码实现WordPress主动推送及自动推送至百度搜索收录
    站长们辛辛苦苦写的文章,无非就是让百度收录,也可以帮助人,也可以给自己站或者帮人优化的站带来流量,今天就来发一篇关于wordprss主动推送给百度的方法;使用方法,U8格式放在wp当前模板functions.php里即可12345678910111213141516171819202122232425262......
  • 阿里dataworks通过pyodps 3获取表元数据及质量稽核
    用途:本脚本的主要作用就是获取所属工作空间中表字段信息核心脚本:本逻辑主要需要五个核心脚本:00_task_meta_setup_time#用于创建表及设置odps的启动时间01_task_meta_fields_move#搬迁数据02_task_meta_tables#表元数据获取及数据量统计03_task_meta_fields_parallel......
  • QPointer、QScopedPointer、QSharedPointer、QWeakPointer
    QPointer、QScopedPointer、QSharedPointer、QWeakPointerQSharedPointer:std::shared_ptrQWeakPointer:std::weak_ptrQScopedPointer:std::unique_ptrQPointer:无STL等效项。QObject析构时为空。QPointer功能:一个“半自动”的指针包装器。通常情况下,我们在手动delete一......
  • 遷移Wordpress到新域名,新子域名
    1.0前言把Wordpress遷移到WordpressMultiSites的子域名,因此“All-in-OneWPMigrationandBackup”就需要付費VIP才支持遷移子域名。但用手動方法也可以實現遷移到子域名。延伸文章:Wordpress主題文章wordpress更改domain域名和數據庫連接2.0 “All-in-OneWPMigratio......
  • 线性dp:最长公共子序列
    最长公共子序列本文讲解的题与leetcode1143.最长公共子序列这题一样,阅读完可以挑战一下。力扣题目链接题目叙述:给定两个字符串,输出其最长公共子序列,并输出它的长度输入:ADABEC和DBDCA输出:DBC3解释最长公共子序列是DBC,其长度为3动态规划思路:我们这题先构建一个模......
  • 线性dp:最长公共子串
    最长公共子串本文讲解的题与leetcode718.最长重复子数组,题意一模一样,阅读完本文以后可以去挑战这题。力扣链接题目叙述:给定两个字符串,输出其最长公共子串的长度。输入ABACCBAACCAB输出3解释最长公共子串是ACC,其长度为3。与最长公共子序列的区别公共子串:字符必须......
  • dp
    前情提要dp专题复习树形dp其实对我来说树形dp会比序列dp学得好一些,因为树是有一个具体形态的东西,推式子是比较具象的。其实序列就是把树拍平在数轴上去dp的,只要考虑到这一点,画出dp的转移图,式子就可以呼之欲出了。不套路的dp考验人类智慧的时刻到了!P1352没有上司......
  • python socket编辑示例 UDP
    服务端:fromsocketimportsocket,AF_INET,SOCK_DGRAMrecv_socket=socket(AF_INET,SOCK_DGRAM)recv_socket.bind(('127.0.0.1',8888))whileTrue:data,addr=recv_socket.recvfrom(1024)#接收数据print('客户说:',data.decode('......