最长公共子序列(稀疏序列)nlogn解法
首先这种做法只能针对稀疏序列,
比如这种情况:
abc abacabc。
会输出5
,,,,就比较尴尬,

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define lli long long int
using namespace std;
const int MAXN=;
const int maxn=0x3f;
void read(int &n)
{
char c='+';int x=;bool flag=;
while(c<''||c>''){c=getchar();if(c=='-')flag=;}
while(c>=''&&c<='')
x=(x<<)+(x<<)+c-,c=getchar();
flag==?n=-x:n=x;
}
int a[MAXN];
int b[MAXN];
int n;
int c[MAXN];// 预处理后的数组
int tot=;
int dp[MAXN];
char aa[MAXN];
char bb[MAXN];
void work()
{
memset(dp,0x3f,sizeof(dp));
tot=;
memset(c,,sizeof(c));
memset(a,,sizeof(a));
memset(b,,sizeof(b));
for(int i=;i<strlen(aa);i++)
a[i+]=aa[i]-; for(int i=;i<strlen(bb);i++)
b[i+]=bb[i]-; for(int i=;i<=strlen(bb);i++)
{
for(int j=strlen(aa);j>=;j--)
if(b[i]==a[j])
c[++tot]=j;
}
//for(int i=1;i<=tot;i++)
// printf("%d ",c[i]);
for(int i=;i<=tot;i++)
{
int p=upper_bound(dp+,dp+tot+,c[i])-dp;
if(dp[p]==c[i])
continue;
dp[p]=c[i];
}
}
int main()
{
//ios::sync_with_stdio(false);
while(~scanf("%s %s",aa,bb))
{
work();
for(int i=;i<=tot+;i++)
{
if(dp[i]>=maxn)
{
printf("%d\n",i-);
break;
}
}
} return ;
}
最长公共子序列(稀疏序列)nlogn解法的更多相关文章
- 【ZH奶酪】如何用Python计算最长公共子序列和最长公共子串
1. 什么是最长公共子序列?什么是最长公共子串? 1.1. 最长公共子序列(Longest-Common-Subsequences,LCS) 最长公共子序列(Longest-Common-Subseq ...
- 用Python计算最长公共子序列和最长公共子串
如何用Python计算最长公共子序列和最长公共子串 1. 什么是最长公共子序列?什么是最长公共子串? 1.1. 最长公共子序列(Longest-Common-Subsequences,LCS) 最长公 ...
- 【算法】最长公共子序列(nlogn)
转载注明出处:http://blog.csdn.net/wdq347/article/details/9001005 (修正了一些错误,并自己重写了代码) 最长公共子序列(LCS)最常见的算法是时间复 ...
- P3402 最长公共子序列(nlogn)
P3402 最长公共子序列 题目背景 DJL为了避免成为一只咸鱼,来找Johann学习怎么求最长公共子序列. 题目描述 经过长时间的摸索和练习,DJL终于学会了怎么求LCS.Johann感觉DJL孺子 ...
- 最长公共子序列 nlogn
先来个板子 #include<bits/stdc++.h> using namespace std; , M = 1e6+, mod = 1e9+, inf = 1e9+; typedef ...
- 洛谷1439:最长公共子序列(nlogn做法)
洛谷1439:最长公共子序列(nlogn做法) 题目描述: 给定两个序列求最长公共子序列. 这两个序列一定是\(1\)~\(n\)的全排列. 数据范围: \(1\leq n\leq 10^5\) 思路 ...
- 【LCS,LIS】最长公共子序列、单调递增最长子序列
单调递增最长子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4 输入 ...
- hunnu 11313 无重复元素序列的最长公共子序列转化成最长递增子序列 求法及证明
题目:http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11313 湖师大的比赛,见我的另一篇水题题解,这里要说的 ...
- C语言 · 最长公共子序列 · 最长字符序列
算法提高篇有两个此类题目: 算法提高 最长字符序列 时间限制:1.0s 内存限制:256.0MB 最长字符序列 问题描述 设x(i), y(i), z(i)表示单个字符,则X={x( ...
- [csu/coj 1078]多个序列的最长公共子序列
题意:给n个序列,同一个序列里面元素互不相同,求它们的最长公共子序列. 思路:任取一个序列,对于这个序列里面的两个数ai,aj(i<j),如果对于其它每一个序列,都出现过ai,aj,且ai在aj ...
随机推荐
- 一种比较高级的方法也可以修改windows为默认启动系统
运行: sudo mv /etc/grub.d/30_os-prober /etc/grub.d/06_os-probersudo update-grub
- SQL Server 2014 中,新建登录用户,分配权限,并指定该用户的数据
一.运行环境 系统:Windows 10数据库:SQL Server 2014数据库名: APP 新建的用户名: app 二.操作步骤 1.打开 MS SQL Server Managemen ...
- thrift - C#(CSharp)客户端连接池(ConnectionPool)
调用示例: var tran = ThriftPool.Instance().BorrowInstance(); TProtocol protocol = new TBinaryProtoco ...
- web开发必看:你的网站支持https吗?
如果有一项技术可以让网站的访问速度更快.更安全.并且seo权重提升(百度除外),而且程序员不需要改代码就可以全站使用,最重要的是,不需要额外花钱,那有这么好的事情吗? HTTP通信协议是全球万维网ww ...
- XP访问WIN10共享打印机提示错误:操作无法完成,拒绝访问
XP系统添加打印机--连接到此计算机的本地打印机(取消自动检测)--创建新端口(LOCAL port)----输入端口名\\计算机名\打印机名.(例如:\\adubei\\HP lasjet 1020 ...
- 细数ZBrush这些年的心路历程
ZBrush 的出现,带来了一场3D造型的革命.它完全颠覆了传统三维设计工具的工作模式,将3D空间绘图这种全新的设计理念呈现在广大设计师面前,强大的雕塑建模功能和颜色绘制功能释放了艺术家的灵感,让设计 ...
- js 获取对象长度
获取对象的程度,可以这样获取: var myObj = {a:1,b:2,c:3} var arr = Object.keys(myObj);var len = arr.length console ...
- [USACO18FEB] Snow Boots G (离线+并查集)
题目大意:略 网上各种神仙做法,本蒟蒻只想了一个离线+并查集的做法 对所有靴子按最大能踩的深度从大到小排序,再把所有地砖按照积雪深度从大到小排序 一个小贪心思想,我们肯定是在 连续不能踩的地砖之前 的 ...
- [luogu4195 Spoj3105] Mod (大步小步)
传送门 题目描述 已知数a,p,b,求满足a^x≡b(mod p)的最小自然数x. 输入输出格式 输入格式: 每个测试文件中最多包含100组测试数据. 每组数据中,每行包含3个正整数a,p,b. 当a ...
- 2019-03-15 使用Request POST获取CNABS网站上JSON格式的表格数据,并解析出来用xlwt写到Excel中
import requests import xlwt url = 'https://v1.cn-abs.com/ajax/ChartMarketHandler.ashx' headers={ 'Us ...