最长公共子序列(稀疏序列)nlogn解法
首先这种做法只能针对稀疏序列,
比如这种情况:
abc abacabc。
会输出5
,,,,就比较尴尬,
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 #define lli long long int 7 using namespace std; 8 const int MAXN=4001; 9 const int maxn=0x3f; 10 void read(int &n) 11 { 12 char c='+';int x=0;bool flag=0; 13 while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;} 14 while(c>='0'&&c<='9') 15 x=(x<<1)+(x<<3)+c-48,c=getchar(); 16 flag==1?n=-x:n=x; 17 } 18 int a[MAXN]; 19 int b[MAXN]; 20 int n; 21 int c[MAXN];// 预处理后的数组 22 int tot=0; 23 int dp[MAXN]; 24 char aa[MAXN]; 25 char bb[MAXN]; 26 void work() 27 { 28 memset(dp,0x3f,sizeof(dp)); 29 tot=0; 30 memset(c,0,sizeof(c)); 31 memset(a,0,sizeof(a)); 32 memset(b,0,sizeof(b)); 33 for(int i=0;i<strlen(aa);i++) 34 a[i+1]=aa[i]-48; 35 36 for(int i=0;i<strlen(bb);i++) 37 b[i+1]=bb[i]-48; 38 39 for(int i=1;i<=strlen(bb);i++) 40 { 41 for(int j=strlen(aa);j>=1;j--) 42 if(b[i]==a[j]) 43 c[++tot]=j; 44 } 45 //for(int i=1;i<=tot;i++) 46 // printf("%d ",c[i]); 47 for(int i=1;i<=tot;i++) 48 { 49 int p=upper_bound(dp+1,dp+tot+1,c[i])-dp; 50 if(dp[p]==c[i]) 51 continue; 52 dp[p]=c[i]; 53 } 54 } 55 int main() 56 { 57 //ios::sync_with_stdio(false); 58 while(~scanf("%s %s",aa,bb)) 59 { 60 work(); 61 for(int i=1;i<=tot+1;i++) 62 { 63 if(dp[i]>=maxn) 64 { 65 printf("%d\n",i-1); 66 break; 67 } 68 } 69 } 70 71 return 0; 72 }
转载于:https://www.cnblogs.com/zwfymqz/p/7197365.html
最长公共子序列(稀疏序列)nlogn解法相关推荐
- 最长公共子序列求序列模板提_最长公共子序列
最长公共子序列求序列模板提 Description: 描述: This question has been featured in interview rounds of Amazon, MakeMy ...
- c语言最长公共子序列_序列比对(二十四)——最长公共子序列
原创: hxj7 本文介绍如何求解两个字符串的最长公共子序列. 最长公共子序列问题 前文<序列比对(二十三)--最长公共子字符串>介绍了如何求解两个字符串的最长公共子字符串,本文将介绍如何 ...
- 两个字符串的最长公共子序列长度_程序员编程算法,解决文本相似度问题的最长公共子序列算法!...
在前面我讲解了如何通过最长公共子串来求解两个文本的相似度问题,但它有一定缺陷,举个例子,看下面的两个字符串 我爱吃小青菜和各种鲜水果. 我很爱吃青菜与各样水果. 上面两个字符串,如果通过计算子串来求相 ...
- 用Python计算最长公共子序列和最长公共子串
如何用Python计算最长公共子序列和最长公共子串 1. 什么是最长公共子序列?什么是最长公共子串? 1.1. 最长公共子序列(Longest-Common-Subsequences,LCS) 最长公 ...
- 求最长公共子序列python_用Python计算最长公共子序列和最长公共子串
1. 什么是最长公共子序列?什么是最长公共子串? 1.1. 最长公共子序列(Longest-Common-Subsequences,LCS) 最长公共子序列(Longest-Common-Subseq ...
- 最长公共子序列(详细代码 注释 分析 以及求出最长公共子序列内容方法)
最长公共子序列 文章有些长,希望能够耐心看完,并且对你有帮助,文章是自己看了书之后,总结的,如果有什么错误的地方,欢迎指出. 一些基本的概念: 子序列: 原序列中删除若干个元素得到的序列,即原序列中可 ...
- 动态规划算法学习二:最长公共子序列
文章目录 前言 一.问题描述 二.DP实现 1.最优子结构性质***** 2.状态表示***** 3.状态递归方程***** 4.计算最优值***** 5.代码实现:输出最长公共子序列 6.代码实现: ...
- 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我)
目录 最长公共子序列(LCS)问题 1.朴素做法 O(n2)O(n^2)O(n2) 2.转换成LIS优化O(nlogn)O(nlogn)O(nlogn) 3.P2758 编辑距离 最长公共子序列(LC ...
- LCS(最长公共子序列)及其O(n)空间优化,O(nlogn)时间复杂度优化
LCS(最长公共子序列)及其O(n)空间优化,O(nlogn)时间复杂度优化 n^2 的版本 int LCS_n_2(vector<char> &a,vector<char& ...
- 最长公共子序列长度的四种解法
一.题目:求两个字符序列的最长公共字符子序列.给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence).比如字符串1:BDCABA:字符串2:ABCBDAB, ...
最新文章
- 用递归和非递归的方法求解n的k次方
- Windows 2003 AD升级至Windows 2012 AD之DHCP服务器迁移
- Modbus crc16校验
- 机器学习算法(1)——贝叶斯估计与极大似然估计与EM算法之间的联系
- 在CentOS7上安装和使用ZooKeeper最新版本(V3.4.12)
- 如何保证高可用?java删除文件夹下所有文件,技术详细介绍
- SOFABoot 扩展点初体验 | SOFALab 实践系列
- excel能创建html吗,如何通过Excel电子表格使用循环创建单独的HTML发布页面
- 纯个人整理!分享珍藏很久的《手把手AI项目》合集手册(附链接)
- 查看User Profile的名称和显示名称
- 5款十分小众,却又非常好用的良心软件
- python抢票_抢票工具成了GitHub热榜第一,最新支持候补抢票,Python跑起来 | 标星8400...
- day 46 http和html
- jbox弹窗_Ztree结合jbox实现弹窗树结构
- 语句摘抄——第21周
- Javascript frameworks
- Linux-基本使用
- Centos 查看/搜素日志 查找文件、目录、内容等 常用命令
- 个人开源项目视频播放器~ERPlayer
- 如何做好详细方案设计?
热门文章
- Netty实战 IM即时通讯系统(十二)构建客户端与服务端pipeline
- 大数据WEB阶段Spring框架(一)IOC控制反转、DI注入依赖
- 大数据WEB阶段(十三)JSP(二)JSP标签、EL表达式、JSTL
- [Qt教程] 第39篇 网络(九)进程和线程
- C语言两班平均成绩,两班工人的平均日产量的标准差系数分别为()。A.甲班11.44%B.甲班8.41%C.乙班12.51%D.乙班9.89% - 作业在线问答...
- java 8 永久代_Java8内存结构—永久代(PermGen)和元空间(Metaspace)
- mysql安装ssl证书_Mysql配置ssl证书
- php两数相乘,php – 如何将数字相乘,直到达到一位数字并计算数字?
- iOS Hacker 越狱后如何使用 root 运行应用
- iOS Hacker 使用Reveal分析App的UI界面