Jzoj4889 最长公共回文子序列

【算法 - 动态规划】最长回文子序列 样本对应模型?范围尝试模型? 如何套路使用! 阅读详情

YJC最近在学习字符串的有关知识。今天,他遇到了这么一个概念:最长公共回文子序列。一个序列S,如果S是回文的且分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共回文子序列。YJC很聪明,他很快就学会了如何求最长公共回文子序列。他现在想把问题规模扩大一些,于是他提出了这么一个问题:给一个长度为n(1≤n≤100000)的字符串a和一个长度为m(1≤m≤20)的字符串b,求a和b的最长公共回文子序列的长度。YJC发现他不会做了,于是他来问你这个问题的答案。

以后写题解都开大字体

嗯,看到数据范围发现可以做呢

枚举b每一个子序列并在A中匹配,复杂度2^m*n

明显T,怎么加速匹配呢?

一个SAM不就行了嘛

这个可是子序列,搞一个数组就可以了,存下每个字符的位置让后二分就好了

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char a[100010],b[30];
int f[26][100010]={0},t[26]={0},n,m;
int w[30],c=0,ans=0;
bool ok(int x){
	for(int i=c=0;x;i++,x>>=1) if(x&1) w[c++]=i;
	for(int i=0;(i<<1)<c;++i) if(b[w[i]]!=b[w[c-i-1]]) return 0;
}
int cal(){
	int pos=-1;
	for(int i=0;i<c;++i){
		int j=b[w[i]]-'a',l=0,r=t[j];
		for(int M;l<r;){
			M=l+r>>1;
			if(f[j][M]<=pos) l=M+1;
			else r=M;
		}
		if(l==t[j]) return 0;
		pos=f[j][l];
	}
	return c;
}
int main(){
	freopen("lcps.in","r",stdin);
	freopen("lcps.out","w",stdout);
	scanf("%s%s",a,b);
	n=strlen(b); m=strlen(a);
	for(int i=0;i<m;++i)
		f[a[i]-'a'][t[a[i]-'a']++]=i;
	for(int i=0;i<26;++i) f[i][t[i]]=m+1;
	for(int i=1;i<(1<<n);++i)
		if(ok(i)) ans=max(ans,cal());
	printf("%d\n",ans);
}

Python爬虫实战:手把手教你用Selenium绕过药监局网站的反爬机制(附完整代码) 本文详细介绍了如何使用Selenium绕过药监局网站的反爬机制,提供了一套完整的Python爬虫实战方案。通过浏览器指纹伪装、动态等待策略、会话维持技巧以及分布式采集设计,帮助开发者高效爬取药监局数据,解决政府类网站常见的反爬挑战。 阅读详情

相关推荐

用Python的fengwo模块复刻通达信筹码峰(COST/WINNER),选股效率提升10倍

本文介绍了如何使用Python的fengwo模块高效复刻通达信的筹码峰(COST/WINNER)计算,显著提升选股效率。通过C++内核与多线程优化,fengwo模块将传统Python实现的数小时计算压缩至分钟级,解决了量化交易中的性能瓶颈问题。文章详细解析了筹码峰计算原理、fengwo模块的技术架构及实战应用,助力量化开发者构建高效选股系统。

weixin_29062823的博客 438

JZOJ 4889 最长公共回文子序列(搜索)

题目大意求两个小写字母串(长度分别为n和m)的最长公共回文子序列。1≤n≤100000,1≤m≤20 时间限制 1s 空间限制 233000K解题思路因为m特别小,所以我们可以暴力枚举第二个串上的每一个回文子序列,在判断是否在第一个串里出现过。 怎么判断是否出现过呢?首先预处理第一个串,pr[i][j]表示在第一个串第i位后面第j个字母首次出现的位置。#include<cstdio> #inc

baidu_34015648的博客 552

项目安全等保测评加固手册

安全等级测评的目的是通过对目标系统在安全技术及管理方面的测评,对目标系统的安全技术状态及安全管理状况做出初步判断,给出目标系统在安全技术及安全管理方面与其相应安全等级保护要求之间的差距。测评结论作为委托方进一步完善系统安全策略及安全技术防护措施依据!!

菜鸟运维升级之路 2416

【jzoj4889】【最长公共回文子序列】【字符串】

题目大意给出一长一短两个字符串,求最长公共回文子序列解题思路枚举短串所有字串判断是否回文,在长串中查找,可以用二分,也可以倒着预处理最近的转移位置。code#include<cstdio> #include<cstring> #include<algorithm> #define LL long long #define min(a,b) ((a<b)?a:b) #define max(a,b) (

inklutcuah’s blog 425

LabVIEW状态机实战:用STM32+DHT11搭建温湿度监测系统(附完整VI源码)

本文详细介绍了如何利用LabVIEW状态机模式与STM32微控制器、DHT11温湿度传感器构建温湿度监测系统。通过硬件选型、状态机设计、LabVIEW程序实现及系统优化等环节,提供了一套完整的解决方案,并附有VI源码,助力开发者快速实现嵌入式温湿度监测应用。

weixin_42549723的博客 518

cannot import name ‘BUFSIZE‘ from ‘numpy‘ 解决方案

本文主要介绍了cannot import name ‘BUFSIZE’ from ‘numpy’ 解决方案,希望能对使用numpy的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 22万+

【NOIP2016提高A组集训第14场11.12】最长公共回文子序列

DescriptionYJC最近在学习字符串的有关知识。今天,他遇到了这么一个概念:最长公共回文子序列。一个序列S,如果S是回文的且分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共回文子序列。YJC很聪明,他很快就学会了如何求最长公共回文子序列。他现在想把问题规模扩大一些,于是他提出了这么一个问题:给一个长度为n(1≤n≤100000)的字符串a和一个

HownoneHe的博客 1017

js逆向-逆向部分技巧总结

js逆向-逆向部分技巧总结

Deng872347348的博客 2130

LeetCode--5 最长回文子串

题目 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" class Solution { int expendaroundcenter(string s,int left,int righ...

Courage-Hu的专栏 779

采用了fluent模拟了平壁面结霜过程。udf,很经典,可以试试。

利用该模型作为FLUENT中的源项,模拟了在局部冷却下冷表面上的霜形成,以预测霜的形态、温度分布和霜的重量,结果与实验结果吻合良好。结果显示,霜首先围绕冷却块形成,然后逐渐向其他方向扩展,冷却块上方的霜密度最大。随着时间的推移,平均霜厚度逐渐增加,生长速率减慢,而平均霜密度随增长速率变快而增加。相变传递微观过程与机理、蒸发及冷凝换热、强化传热、高效传热管、热泵、制冷、节水节能新技术、电子元器件冷却、余热回收及梯级利用等。udf,很经典,可以试试。工程热物理、空调、热能、低温制冷、化工、物理等。

qq_15963745的博客 920

在 ABAP Cloud 里优雅读取与解析 XML:用 sXML Reader 把接口数据落成结构化 ABAP

ABAP Cloud中XML解析实践 摘要:本文介绍了在ABAP Cloud环境下解析XML数据的最佳实践。针对企业系统中常见的XML格式数据,文章推荐使用sXML库中的CL_SXML_STRING_READER进行流式解析,而非传统的DOM方式。重点解析了命名空间(Namespace)、属性(Attribute)和CDATA等关键概念的处理方法,并比较了两种读取属性的策略:通扫所有属性(NEXT_ATTRIBUTE)和精准取值(GET_ATTRIBUTE_VALUE)。文章提供了完整的ABAP Cloud

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 186

C++ 最长回文子序列

#include<iostream> #include<string> #include<algorithm> using namespace std; //递归方法,求解最长回文子序列 //str输入,res输出结果,ptr当前递归回文字符串,i检测左边,j检测右边, //Max所有递归中最长的长度,pre当前递归长度 void lps(string str,string & res,string ptr,int i, int j,int & Max,

努力是明天快乐的源泉 1157

Unity零基础到入门 ☀️| 近万字教程 对 Unity 中的 动画系统基础 全面解析+实战演练,你确定要错过吗?

Unity动画系统,Animation,Animator。 本文对Unity中的动画系统基础做了一个全面解析,还包括实战演练。近万字教程让你对Unity的动画系统有一个系统的了解,敬请品尝!

努力前行,总会成为自己心中的那道光 9万+

【JZOJ4889】最长公共回文子序列

Description给一个长度为n(1≤n≤100000)的字符串a和一个长度为m(1≤m≤20)的字符串b,求a和b的最长公共回文子序列的长度。

sadnohappy 407

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【JZOJ4889】【NOIP2016提高A组集训第14场11.12】最长公共回文子序列

题目描述YJC最近在学习字符串的有关知识。今天,他遇到了这么一个概念:最长公共回文子序列。一个序列S,如果S是回文的且分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共回文子序列。YJC很聪明,他很快就学会了如何求最长公共回文子序列。他现在想把问题规模扩大一些,于是他提出了这么一个问题:给一个长度为n(1≤n≤100000)的字符串a和一个长度为m(1≤

=w= 397

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Leetcode:647. 回文子串、516. 最长回文子序列(C++)

Leetcode:647. 回文子串、516. 最长回文子序列(C++)

Cosmoshhhyyy的博客 704

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

区间动态规划——最长回文子序列长度(C++)

把夜熬成粥,然后喝了它。

m0_73962294的博客 1125

动态规划——最长回文子序列

【代码】动态规划——最长回文子序列。

saber520___的博客 338

1143.最长公共子序列 | 516.最长回文子序列 | 813.最大平均值和的分组

给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。

weixin_50437588的博客 256

最长公共回文子序列

题目大意求两个字符串的最长公共回文子序列。 其中一个字符串长度仅为20。SB题用2^20枚举最长公共回文子序列,然后检验很长的那个串是否存在这个子序列。 可以预处理next[i,j]表示第i个位置后的第一个字符为j的位置,这样每次检验只跳m步。#include<cstdio> #include<algorithm> #include<cstring> #define fo(i,a,b) for(

不来也不去的一只失忆蝴蝶 595

【算法】动态规划专题④ ——LCS(最长公共子序列)+ LPS(最长回文子序列) python

LCS(最长公共子序列)+ LPS(最长回文子序列)

查理零世的博客 1451

lcs leetcode1143 dp

最长公共子序列 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。 两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。 示例 1: 输入:text1 = “abcde”, tex.

weixin_46186724的博客 534
上一篇: Jzoj4888 最近公共祖先
下一篇: Jzoj5443【NOIP2017提高A组冲刺11.2】字典序
扩展的灰
博客等级 码龄12年 60粉丝 342原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值