博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P1140 相似基因 (dp)
阅读量:5258 次
发布时间:2019-06-14

本文共 2069 字,大约阅读时间需要 6 分钟。

题目背景

大家都知道,基因可以看作一个碱基对序列。它包含了44种核苷酸,简记作A,C,G,TA,C,G,T。生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物。

在一个人类基因工作组的任务中,生物学家研究的是:两个基因的相似程度。因为这个研究对疾病的治疗有着非同寻常的作用。

题目描述

两个基因的相似度的计算方法如下:

对于两个已知基因,例如AGTGATGAGTGATG和GTTAGGTTAG,将它们的碱基互相对应。当然,中间可以加入一些空碱基-,例如:

这样,两个基因之间的相似度就可以用碱基之间相似度的总和来描述,碱基之间的相似度如下表所示:

那么相似度就是:(-3)+5+5+(-2)+(-3)+5+(-3)+5=9(3)+5+5+(2)+(3)+5+(3)+5=9。因为两个基因的对应方法不唯一,例如又有:

相似度为:(-3)+5+5+(-2)+5+(-1)+5=14(3)+5+5+(2)+5+(1)+5=14。规定两个基因的相似度为所有对应方法中,相似度最大的那个。

输入输出格式

输入格式:

 

共两行。每行首先是一个整数,表示基因的长度;隔一个空格后是一个基因序列,序列中只含A,C,G,TA,C,G,T四个字母。1 \le1≤序列的长度\le 100100。

 

输出格式:

 

仅一行,即输入基因的相似度。

 

输入输出样例

输入样例#1:

7 AGTGATG

5 GTTAG

输出样例#1: 

14

思路:dp[i][j]表示当前i和j匹配的最优情况 我们知道有三种情况 即i与j直接匹配 i和空格匹配 j和空格匹配 我们选取这三个的最大值

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long intusing namespace std;inline ll gcd(ll a,ll b){ return b?gcd(b,a%b):a;}inline ll lcm(ll a,ll b){ return a/gcd(a,b)*b;}int moth[13]={ 0,31,28,31,30,31,30,31,31,30,31,30,31};int dir[2][2]={ 1,0 ,0,1};int dirs[8][2]={ 1,0 ,0,1 ,-1,0 ,0,-1, -1,-1 ,-1,1 ,1,-1 ,1,1};const int inf=0x3f3f3f3f;const ll mod=1e9+7;int c[5][5]={ { 5,-1,-2,-1,-3}, { -1,5,-3,-2,-4}, { -2,-3,5,-2,-2}, { -1,-2,-2,5,-1}, { -3,-4,-2,-1,0}}; int dp[107][107]; //i和j匹配的最优解 int main(){ ios::sync_with_stdio(false); int n,m; string a,b; cin>>n>>a>>m>>b; map
mm; mm['A']=0; mm['C']=1; mm['G']=2; mm['T']=3; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) dp[i][j]=-inf; dp[0][0]=0; for(int i=1;i<=n;i++){ dp[i][0]=dp[i-1][0]+c[mm[a[i-1]]][4]; //初始化 } for(int i=1;i<=m;i++) dp[0][i]=dp[0][i-1]+c[4][mm[b[i-1]]]; //初始化 for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ dp[i][j]=max(dp[i][j],dp[i-1][j]+c[mm[a[i-1]]][4]); //i和空格匹配 dp[i][j]=max(dp[i][j],dp[i][j-1]+c[4][mm[b[j-1]]]); //j和空格匹配 dp[i][j]=max(dp[i][j],dp[i-1][j-1]+c[mm[a[i-1]]][mm[b[j-1]]]); //i和j匹配 } cout<
<

 

转载于:https://www.cnblogs.com/wmj6/p/10747922.html

你可能感兴趣的文章
【Install】我是如何安装Linux类系统的
查看>>
作业三4
查看>>
多态存在的3个必要条件
查看>>
code First 四
查看>>
Django与Ajax
查看>>
再做一题,2013-6-16更新
查看>>
Oracle_Statspack性能诊断工具
查看>>
面向对象(封装、继承、多态、抽象)
查看>>
Memcached数据库缓存
查看>>
转获取sql维护的表关系
查看>>
网络基础——TCP/IP五层模型
查看>>
HDU-3018 Ant Trip(欧拉回路)
查看>>
CDOJ 1251 谕神的密码 贪心
查看>>
CMYK列印颜色
查看>>
多线程 测试
查看>>
web提前做好测试
查看>>
tp5.1 本地正常, 线上route.php不起作用的问题
查看>>
[笔记] 斯特林公式
查看>>
opencv删除轮廓
查看>>
实战分区表:SQL Server 2k5&2k8系列(三)
查看>>