1264: [AHOI2006]基因匹配Match

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 982  Solved: 635
[Submit][Status][Discuss]

Description

基因匹配(match) 卡卡昨天晚上做梦梦见他和可可来到了另外一个星球,这个星球上生物的DNA序列由无数种碱基排列而成(地球上只有4种),而更奇怪的是,组成DNA序列的每一种碱基在该序列中正好出现5次!这样如果一个DNA序列有N种不同的碱基构成,那么它的长度一定是5N。 卡卡醒来后向可可叙述了这个奇怪的梦,而可可这些日子正在研究生物信息学中的基因匹配问题,于是他决定为这个奇怪星球上的生物写一个简单的DNA匹配程序。 为了描述基因匹配的原理,我们需要先定义子序列的概念:若从一个DNA序列(字符串)s中任意抽取一些碱基(字符),将它们仍按在s中的顺序排列成一个新串u,则称u是s的一个子序列。对于两个DNA序列s1和s2,如果存在一个序列u同时成为s1和s2的子序列,则称u是s1和s2的公共子序列。 卡卡已知两个DNA序列s1和s2,求s1和s2的最大匹配就是指s1和s2最长公共子序列的长度。 [任务] 编写一个程序:  从输入文件中读入两个等长的DNA序列;  计算它们的最大匹配;  向输出文件打印你得到的结果。

Input

输入文件中第一行有一个整数N,表示这个星球上某种生物使用了N种不同的碱基,以后将它们编号为1…N的整数。 以下还有两行,每行描述一个DNA序列:包含5N个1…N的整数,且每一个整数在对应的序列中正好出现5次。

Output

输出文件中只有一个整数,即两个DNA序列的最大匹配数目。

Sample Input

2
1 1 2 2 1 1 2 1 2 2
1 2 2 2 1 1 2 2 1 1

Sample Output

7

HINT

[数据约束和评分方法]
60%的测试数据中:1<=N <= 1 000
100%的测试数据中:1<=N <= 20 000

Source

TLE

#include<cstdio>
#include<iostream>
using namespace std;
int read(){register int x=0;bool f=1;register char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=0;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return f?x:-x;
}
const int N=1e5+10;
int n,a[N],b[N],f[2][N];
int main(){n=read();n*=5;for(int i=1;i<=n;i++) a[i]=read();for(int i=1;i<=n;i++) b[i]=read();int now=0;for(int i=1;i<=n;i++){now^=1;for(int j=1;j<=n;j++){if(a[i]==b[j]){f[now][j]=f[now^1][j-1]+1;}else{f[now][j]=max(f[now^1][j],f[now][j-1]);}}}printf("%d",f[now][n]);return 0;
}

AC

//f[k]表示s2匹配到s1的k位置,最大公共子串的长度
#include<cstdio>
#include<iostream>
using namespace std;
int read(){register int x=0;bool f=1;register char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=0;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return f?x:-x;
}
const int N=1e5+10;
int n,ans,pos[N][6],f[N];
int lowbit(int x){return x&-x;
}
void updata(int x,int val){for(int i=x;i<=n;i+=lowbit(i)) f[i]=max(f[i],val);
}
int query(int x){int res=0;for(int i=x;i;i-=lowbit(i)) res=max(res,f[i]);return res;
}
int main(){n=read();n*=5;for(int i=1,x;i<=n;i++) x=read(),pos[x][++pos[x][0]]=i;//加树状数组维护降至O(nlogn) for(int i=1,x;i<=n;i++){x=read();for(int j=5;j;j--){int k=pos[x][j];//s1[j]=s2[1] f[k]=max(f[k],query(k-1)+1);updata(k,f[k]);ans=max(ans,f[k]);}}printf("%d",ans);return 0;
}

转载于:https://www.cnblogs.com/shenben/p/6255000.html

1264: [AHOI2006]基因匹配Match相关推荐

  1. bzoj 1264: [AHOI2006]基因匹配Match(树状数组)

    1264: [AHOI2006]基因匹配Match Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1211  Solved: 798 [Submit ...

  2. bzoj 1264: [AHOI2006]基因匹配Match (树状数组优化dp)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1264 思路: n大小为20000*5,而一般的dp求最长公共子序列复杂度是 n*n的,所以我 ...

  3. 字符串查找匹配 —— .match()方法

    今天发现一个非常好用的查找匹配字符串的方法 就是String提供的 .match() 方法 .match() 是用来查找字符的 var str = 'asdfghajkwyai'; var resul ...

  4. 模板匹配(Match Template)

    前言    模板匹配是在图像中寻找目标的方法之一.Come On, Boy.我们一起来看看模板匹配到底是怎么回事. 模板匹配的工作方式     模板匹配的工作方式跟直方图的反向投影基本一样,大致过程是 ...

  5. python opencv屏幕找图_使用Python+OpenCV进行图像模板匹配(Match Template)实例-找到百度首页按钮并点击...

    意图:准备一张小图,在电脑屏幕上找到小图坐标,并点击. 1  安装 opencv 和 numpy: pip3 install opencv-python 上述命令将 opencv 和 numpy都安装 ...

  6. [颓废史]蒟蒻的刷题记录

    QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...

  7. 基因 ID 匹配利器

    一.背景 对于每个生物信息分析的人来说,ID 匹配(映射)是一项非常常见,但又很繁琐的任务.假设,我们有一个来自上游分析的 gene symbol 或报告的 ID 列表,然后我们的下一个分析却需要使用 ...

  8. javascript中的正则匹配函数exec(),test(),match()

    test() var str = "cat"; var reStr = /cat/; alert(reStr.test(str)); 输出为:true 它的返回值为true or ...

  9. ElasticSearch查询 第四篇:匹配查询(Match)

    <ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...

最新文章

  1. LocationDemo has leaked ServiceConnection 异常并且无法定位的时候
  2. 数组常用解题方法(持续更新)
  3. leetcode-79-单词搜索(用dfs解决)
  4. 技术网站 --人人都是产品经理
  5. mysql有3个共同好友_共同好友mysql
  6. 一文读懂 Serverless,将配置化思想复用到平台系统中
  7. 看完后,别再说自己不懂用户画像了
  8. linux删除jpeg动态库,linux如何不用的删除动态库
  9. java 程序是由什么组成的 java_【问答题】一个典型的JAVA程序结构是由什么组成。...
  10. 【java笔记】线程(4):匿名内部类创建线程
  11. Git/Repo/Gerrit区别
  12. [在职软件工程]面向对象的分析与设计
  13. 教程-Delphi7 自带控件安装对应表
  14. lopatkin俄大神精简中文系统Windows 7 Professional SP1 7601.24540 x64 ZH-CN LITE10
  15. 三菱plc分拣程序_基于三菱PLC与视觉检测的快速分拣控制系统
  16. 从零开始写一个武侠冒险游戏-1-状态原型
  17. 批量查询域名是否注册
  18. 软件实用小技巧,大大提高学习、办公效率
  19. Mac系统好用快捷键简记
  20. Python开发常见bug

热门文章

  1. 科技部:学术不端零容忍!违规人员所获职称、奖金等全部清退归零
  2. 科技部部长:基础研究是科技创新“总开关”
  3. 任正非签发最新电邮:过去我们是为了赚点小钱,现在是要战胜美国
  4. 从IoT World 2019看全球IoT九大发展趋势
  5. 美国发布《评估和强化制造与国防工业基础及供应链弹性》报告
  6. 特斯拉VS Waymo:谁将赢得无人驾驶汽车竞赛?
  7. DeepMind推出分布式深度强化学习架构IMPALA,让一个Agent学会多种技能
  8. PNAS最新研究揭示大脑如何学习语言
  9. 传阿里腾讯即将大裁员,最高涉及30%员工
  10. Mrtg搭建流量监控服务器