「山东省队集训2021 Round 1」 半夜
考虑将 \(X\) 复制一次放到后面再对其长度为 \(n\) 的连续子串和 \(Y\) 求一波 \(\rm{Longest\ Common\ Subsequence}\) 就能得到 \(\Theta(n^3)\) 的分数了
那么设 \(f_{i,j,k}\) 表示 \(X[i\dots j],Y[1\dots k]\) 的 \(LCS\)
考虑如下两个性质:
\]
\]
下文受篇幅限制只证明第一个:
因为这个 \(\rm{DP}\) 类似于网格图上最大带权游走,那么设两个串的左端点为网格图起始点,右端点为终止点
不难发现两条路径必然存在交点,设 \((i-1,0)\) 到 \((j,k)\) 的 最靠左 路径为 \(C_1\),而 \((i,0)\) 到 \((j-1,k)\) 的最靠左的最优路径为 \(C_2\)
设两个路径公共部分是 \(C\),之前是 \(C_1A,C_2A\),之后的是 \(C_1B,C_2B\),把已知和结论统统表示出来互相推就行了
那么必然存在 \(\rm{p(j,k),q(j,k)}\) 满足:
\]
至此可以得到所有 \(p(n,x)\) 然后使用第一个等号后的式子递推 \(\rm{f(x,x+n-1,n)}\) 即可
考虑如何转移 \(\rm{p,q}\)?
设 \(P=p_{k-1,j},Q=q_{k,j-1}\)(认真注意变量定义)
\(X_i\ne Y_j\)
如果 \(P<Q\),把 \(f_{i,j-1,k},f_{i,j,k-1}\) 的转移结果写出来就能发现 \(p(k,j)=Q,q(k,j)=P\),因为 \(f_{i,j,k}\ge \max\{f_{i,j-1,k},f_{i,j,k-1}\}\)

而对于 \(P\ge Q\) 的情况,仍然是写出来转移的结果得到 \(p_{i,j}=P,q(i,j)=Q\)

\(X_i=Y_j\)
这里必然会有 \(f_{i,j,k}=f_{i,j-1,k-1}+1\),那么分开讨论究竟是哪边加了 \(1\),对转移有贡献的如下:
如果 \(f_{i,j,k}=f_{i,j-1,k}+1\),即上次不能转移,但是现在可以,那么必然满足 \(i\ge Q,p(k,j)=Q\)
如果 \(f_{i,j,k}=f_{i,j,k-1}\),即提前转移过了,现在不能转移,那么必然满足 \(i\ge P,q(k,j)=p\)
这样就可以了! 时间复杂度 \(O(n^2)\)
$\texttt{Talk is cheap,Show the Code}$
const int N=2010;
int p[N][N<<1],q[N][N<<1],f[N<<1][N<<1],n,ans;
char x[N<<1],y[N];
signed main(){
n=read(); scanf("%s%s",x+1,y+1); rep(i,1,n) x[i+n]=x[i];
rep(i,1,n*2) p[0][i]=i+1; rep(i,1,n*2) q[0][i]=1;
rep(i,1,n) rep(j,1,(n<<1)){
int P=p[i-1][j],Q=q[i][j-1];
if(P>=Q&&x[j]!=y[i]) p[i][j]=P,q[i][j]=Q;
else p[i][j]=Q,q[i][j]=P;
}
rep(i,0,(n<<1)) rep(j,i,(n<<1)) f[i][j]=f[i][j-1]+(i>=p[n][j]);
rep(i,1,n) ckmax(ans,f[i][i+n-1]); print(ans); return 0;
}
//Use The Time To Enrich This Selfclosing Youth
「山东省队集训2021 Round 1」 半夜的更多相关文章
- 【考试记录】2018 山东省队集训第一轮D4(雾)
T1题意: 给你一个$n\times m$的矩阵$B$,求它能由最少多少个形如两个向量之积$(n\times 1)\times(1\times m)$的矩阵相加得到. 题解: 考虑上界,最多需要$mi ...
- #6164. 「美团 CodeM 初赛 Round A」数列互质-莫队
#6164. 「美团 CodeM 初赛 Round A」数列互质 思路 : 对这个题来言,莫队可以 n*根号n 离线处理出各个数出现个的次数 ,同时可以得到每个次数出现的次数 , 但是还要处理有多少 ...
- loj #6046. 「雅礼集训 2017 Day8」爷
#6046. 「雅礼集训 2017 Day8」爷 题目描述 如果你对山口丁和 G&P 没有兴趣,可以无视题目背景,因为你估计看不懂 …… 在第 63 回战车道全国高中生大赛中,军神西住美穗带领 ...
- LOJ_6045_「雅礼集训 2017 Day8」价 _最小割
LOJ_6045_「雅礼集训 2017 Day8」价 _最小割 描述: 有$n$种减肥药,$n$种药材,每种减肥药有一些对应的药材和一个收益. 假设选择吃下$K$种减肥药,那么需要这$K$种减肥药包含 ...
- 「雅礼集训 2017 Day7」事情的相似度
「雅礼集训 2017 Day7」事情的相似度 题目链接 我们先将字符串建后缀自动机.然后对于两个前缀\([1,i]\),\([1,j]\),他们的最长公共后缀长度就是他们在\(fail\)树上对应节点 ...
- 「雅礼集训 2017 Day2」解题报告
「雅礼集训 2017 Day2」水箱 我怎么知道这种题目都能构造树形结构. 根据高度构造一棵树,在树上倍增找到最大的小于约束条件高度的隔板,开一个 \(vector\) 记录一下,然后对于每个 \(v ...
- 「雅礼集训 2017 Day1」 解题报告
「雅礼集训 2017 Day1」市场 挺神仙的一题.涉及区间加.区间除.区间最小值和区间和.虽然标算就是暴力,但是复杂度是有保证的. 我们知道如果线段树上的一个结点,\(max=min\) 或者 \( ...
- [LOJ 6031]「雅礼集训 2017 Day1」字符串
[LOJ 6031] 「雅礼集训 2017 Day1」字符串 题意 给定一个长度为 \(n\) 的字符串 \(s\), \(m\) 对 \((l_i,r_i)\), 回答 \(q\) 个询问. 每个询 ...
- [LOJ 6030]「雅礼集训 2017 Day1」矩阵
[LOJ 6030] 「雅礼集训 2017 Day1」矩阵 题意 给定一个 \(n\times n\) 的 01 矩阵, 每次操作可以将一行转置后赋值给某一列, 问最少几次操作能让矩阵全为 1. 无解 ...
随机推荐
- 记录21.08.04 — mybatis入门学习
mybatis入门 mybatis简介 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工 ...
- 记录21.07.22 —— Vue.js基础(一)
VUE基础 语雀课件地址 Vue.js框架 Vue中文文档 Vue.js 创建vue项目 ①在一个空项目中引入vue的js文件 <script src="https://cdn.jsd ...
- expect命令和here document免交互
目录 一.Here Document免交互 1.1 概述 1.2 语法格式 1.3 简单案例 1.4 支持变量替换 1.5 多行注释 1.6 完成自动划分磁盘免交互 二.Expect进行免交互 2.1 ...
- 2020年度钻石C++C学习笔记(3)--《博学谷》
1.Unix/Linux操作系统介绍 1.1 操作系统的作用 1.1.1 操作系统的目标 l 方便:使计算机系统易于使用 l 有效:以更有效的方式使用计算机系统资源 l 扩展:方便用户有效开发.测试和 ...
- Go interface 原理剖析--类型转换
hi, 大家好,我是 haohognfan. 可能你看过的 interface 剖析的文章比较多了,这些文章基本都是从汇编角度分析类型转换或者动态转发.不过随着 Go 版本升级,对应的 Go 汇编也发 ...
- Check Directory Existence in Shell
The following command in one line can check if a directory exists. You can check the return value (& ...
- sql server时间转换
--getdate 获取当前时间 select getdate() --dateadd 原有时间加: 2013-02-17 13:20:16 此时间加12个月 select dateadd(MONTH ...
- PHP下对Mysql数据库的操作
PHP连接数据库: 使用 mysqli-connect()函数,函数里面至少填三个变量:host,用户名,密码. $dbHost="localhost"; $dbUser=&quo ...
- docker 部署mysql连接问题
发现windows上有一个docker descktop(虽然不怎么好用), 安装之后准备直接用docker搭本地测试环境的基础设施(比如MySQL,Redis,MongoDB,ES啥的), 虽然比去 ...
- SpringBoot启动异常 Process finished with exit code 1
记录一下一个报错 : < Springboot项目启动之后直接 Process finished with exit code 1 1. 是否有spring-boot-starter-web依赖 ...