正题

题目链接:https://loj.ac/p/6564


题目大意

给两个序列a,ba,ba,b求它们的最长公共子序列。

1≤n,m,ai,bi≤7×1041\leq n,m,a_i,b_i\leq 7\times 10^41≤n,m,ai​,bi​≤7×104


解题思路

无意间看到的一个bitsetbitsetbitset科技。

首先设fi,jf_{i,j}fi,j​表示aaa串匹配到第iii个bbb串匹配到第jjj个时的最长长度,做过dpdpdp套dpdpdp的应该知道fi,jf_{i,j}fi,j​的性质。
0≤fi,j−fi,j−1≤10\leq f_{i,j}-f_{i,j-1}\leq 10≤fi,j​−fi,j−1​≤1

基本的思路就是设010101矩阵MMM满足fi,j=∑k=1jMi,kf_{i,j}=\sum_{k=1}^jM_{i,k}fi,j​=∑k=1j​Mi,k​然后用bitsetbitsetbitset优化转移

然后考虑一下怎么转移,我们先预处理出ppp数组其中pip_ipi​表示数字iii出现的位置集合

我们的转移要把MMM中的111尽量的往前移动并且看能否加上一个新的111。

假设现在的字符是ccc,那么我们将使用pcp_cpc​进行转移。

我们把MMM中每个111作为结尾分成若干段(最后的000也是一段,顺序是从低位到高位)。

那么对于一段中如果这一段pcp_cpc​有111那么我们就取最前面的那个111,这样因为前面假设有jjj个111那么这次就匹配pcp_cpc​最前面的那个作为j+1j+1j+1。

但是我们显然不可能一段一段做,我们可以考虑怎么把这个操作转成位运算

[科技]Loj#6564-最长公共子序列【bitset】相关推荐

  1. 触类旁通,经典面试题最长公共子序列应该这么答

    作者 |  labuladong 来源 | labuladong(ID:labuladong) [导读]最长公共子序列(Longest Common Subsequence,简称 LCS)是一道非常经 ...

  2. [csu/coj 1078]多个序列的最长公共子序列

    题意:给n个序列,同一个序列里面元素互不相同,求它们的最长公共子序列. 思路:任取一个序列,对于这个序列里面的两个数ai,aj(i<j),如果对于其它每一个序列,都出现过ai,aj,且ai在aj ...

  3. Algorithm:C++/python语言实现之求旋转数组最小值、求零子数组、求最长公共子序列和最长公共子串、求LCS与字符串编辑距离

    Algorithm:C++/python语言实现之求旋转数组最小值.求零子数组.求最长公共子序列和最长公共子串.求LCS与字符串编辑距离 目录 一.求旋转数组最小值 1.分析问题 2.解决思路 二.求 ...

  4. 51NOD 1006 最长公共子序列 Lcs 动态规划 DP 模板题 板子

    给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最 ...

  5. 最长公共子序列 LCS(模板) poj 1458

    一.标准模板 #include <iostream> #include <stdio.h> #include <cstring> #include <vect ...

  6. 最长公共子序列(LCS)问题 Longest Common Subsequence 与最长公告字串 longest common substr...

    问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X="x0,x1,-,xm-1",序列Y=& ...

  7. 【动态规划】最长公共子序列与最长公共子串

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  8. POJ 3080 多个串最长公共子序列

    求多个串最长公共子序列,字典序最小输出.枚举剪枝+kmp.比较简单,我用find直接查找16ms #include<iostream> #include<string> #in ...

  9. java实现最长连续子序列_最长公共子序列 ||

    问题:在 前一篇文章 最长公共子序列 | 的基础上要求将所有的最长公共子序列打印出来,因为最长公共子序列可能不只一种. 难点:输出一个最长公共子序列并不难,难点在于输出所有的最长公共子序列,我们需要在 ...

最新文章

  1. 算法训练 P0103
  2. - 运算符(C# 参考)
  3. 用git进行项目搭建
  4. 计算机类专业综合理论模拟试卷1,山东省2011年高等职业教育对口招生计算机类专业理论综合模拟试题(一)...
  5. python 小例子 源码 莫凡_100 个 Python 小例子(一)
  6. DWR的使用以及DWR中工具JS文件的使用
  7. stat函数_数据分析工具入门 掌握这些Excel函数就够了
  8. 你可能对电灯泡一无所知
  9. javascript模块_JavaScript中的模块
  10. 商户定价模型—风控人又一经典必学知识
  11. NOIP模拟测试25
  12. 动态的给python添加进度条_python动态进度条的实现代码
  13. java -jar命令
  14. python爬取喜马拉雅vip音频_Python简易爬虫教程(三)--爬取喜马拉雅音频
  15. matlab距离平方和公式推导,求助高手,用matlab求两幅图像平方和再开根号公式怎样表达?...
  16. apk部分手机安装失败_如何解决APK安装失败 INSTALL..
  17. cdr宏教程_CDR-VBA宏完整案例详解(上部)
  18. LINUX入门——Linux是什么?
  19. 微信小程序之网易云音乐(五)- 排行详情页、歌单详情页、播放器组件开发
  20. 开源配置管理系统的选择和搭建

热门文章

  1. axure 组件_技巧分享 | Axure后台组件制作的全过程
  2. androidstudio学习总结_Android 开发工程师自述:2年的开发,我总结了7条经验
  3. java 面相,java学习17-面相对象(多态)
  4. fb静态区域_fb 静态数据
  5. 新增一个主键自增长_MyBatis 示例-主键回填
  6. 用python画树_Python+Turtle动态绘制一棵树实例分享
  7. java socket send_java socket编程
  8. 云付认证已通过可以支付吗_海科融通丨刷新支付日常问题【附交易操作步奏】...
  9. 软件构造学习笔记-第九周、第十周
  10. leetcode20. 有效的括号