首页 > 其他分享 >复训时很好的字符串题

复训时很好的字符串题

时间:2024-11-04 14:58:41浏览次数:3  
标签:前缀 复训 max 一段 字符串 border 转移

description

pArHMY4.jpg

solution

考虑到这么一件事情,就是我最终的字符串 \(t\) 一定是由 \(s\) 的若干段前缀拼接而成,因为如果不是前缀,换成前缀一定不劣。

然后我们拥有一个朴素的状态 \(f_{i, j}\) 表示填到第 \(i\) 个数,且最后一段是由一段长度为 \(j\) 的前缀拼接成的最大贡献。

考虑转移,显然我们有 \(f_{i + 1, j + 1} = \max ( f_{i, j} + g_{j + 1} )\),其中 \(g_{j + 1}\) 为一个关于 \(j + 1\) 的有关定值状物。但是明显不止这一种转移,注意到我们可以将 \([1, j]\) 的任意一段 border 拎出来进行转移,因为是 border,所以我的 border 仍然是一段前缀,符合状态设计,并且末尾去掉 border 仍然是一段前缀,即可转移。即 \(f_{i, nxt_j} = \max ( f_{i, j} )\)。

最后取一下 \(\max\) 即可。不难发现转移条件是充要的。

标签:前缀,复训,max,一段,字符串,border,转移
From: https://www.cnblogs.com/alexande/p/18525268

相关文章

  • 字符串学习
    manacher马拉车算法(,OI-Wiki算法介绍:线性复杂度内找出以每个字符为回文中心的最长回文半径存下模板代码:intl=0,r=-1;for(inti=1;i<=n;i++){intk=i>r?1:min(d[l+r-i],r-i+1);while(i-k>0andk+i<=nands[i-k]==s[i+k])k++;d[......
  • python小白入手之——字符串、集合
    数据容器的视角学习字符串:字符串是字符的容器字符串支持正向下标索引和反向下标索引同元组一样,字符串也是一个无法修改的数据容器1.index()2.字符串的替换:语法:字符串.replace(字符串1,字符串2),功能:将字符串1中的全部内容更换成字符串2,但要注意,并不是修改字符串本身,而是得到了......
  • 【字符函数以及字符串函数
    本章重点重点介绍处理字符和字符串的库函数的使用和注意事项求字符串长度strlen长度不受限制的字符串函数strcpystrcatstrcmp长度受限制的字符串函数介绍strncpystrncatstrncmp字符串查找strstrstrtok前言C语言中对字符和字符串的处理很是频繁,但是C语言本身......
  • 记录一下自己的优化字符串匹配算法
    我愿称之KeBF算法Ke的BF(BruteForce,暴力检索)法关于其他字符串匹配算法示例源码#include<stdio.h>#include<string.h>intmain(){//读入两个字符串charms[100],ps[100];fgets(ms,sizeof(ms),stdin);fgets(ps,sizeof(ps),stdin);//......
  • C和C++的字符串有什么不同?
    一、C语言中字符串的存储方式C语言没有专门用于存储字符串的变量类型,字符串都被存储在char类型的数组中,且以字符\0结尾;字符数组存储在C语言中,字符串常常以字符数组的形式进行存储。例如:charstr[]="Hello";这里定义了一个字符数组str,编译器会自动在字符串......
  • 代码随想录算法训练营第十天|leetcode232.用栈实现队列、leetcode225. 用队列实现栈、
    1leetcode232.用栈实现队列题目链接:232.用栈实现队列-力扣(LeetCode)文章链接:代码随想录视频链接:栈的基本操作!|LeetCode:232.用栈实现队列哔哩哔哩bilibili自己的思路:真的第一次接触这个概念,完全没有任何思路,甚至不知道从何下手1.1基本概念栈就是相当于砌墙的砖头,先......
  • 代码随想录算法训练营第九天|leetcode151.翻转字符串里的单词、卡码网55.右旋字符串、
    1leetcode151.翻转字符串里的单词题目链接:151.反转字符串中的单词-力扣(LeetCode)文章链接:代码随想录视频链接:字符串复杂操作拿捏了!|LeetCode:151.翻转字符串里的单词哔哩哔哩bilibili自己的思路:直接将空格去掉,然后分割字符串为列表,在列表中进行翻转,不在字符串内部操作......
  • C和C++的字符串有什么不同?
    C字符串C语言没有专门用于存储字符串的变量类型,字符串都被存储在char类型的数组中,且以字符 \0结尾;#include<stdio.h>intmain(){ charstr[4]="sv";//charstr[3]="sv";是错的 charstr[]="sv"; charstr[4]={'s','','v'......