P1140 相似基因

P1140 相似基因

题目背景

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

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

题目描述

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

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

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

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

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

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#1:

7 AGTGATG
5 GTTAG

输出样例#1:

14

分析:

洛谷题解,说的够详细了我就不自己写了

首先,这是一道DP,类似最长公共子序列,f[i,j]可从f[i-1,j-1],f[i-1,j],f[i,j-1]转移过来。

f[i][j]:字符串s1的前i个与字符串s2的前j个匹配所能达到的最大匹配值(不计算空碱基)

伪代码:f[i][j]=max(f[i][j],f[i-1][j]+(s2[j]与空碱基匹配的值),f[i][j-1]+(s1[i]与空碱基匹配的值),f[i-1][j-1]+(s1[i]与s2[j]匹配值))

S1: A G T G A T G

i : 1 2 3 4 5 6 7

S2: G T T A G

j : 1 2 3 4 5

当i=3,j=3时 ,(前面四个字符中的空碱基省略不写,这里代表将前四个字符匹配好后能得到的最大值)

1. S1: A G + T

S2: G T + T

2. S1: A G + _(空碱基)

S2: G T + T

3. S1: A G + T

S2: G T + _(空碱基)

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int l1,l2,a[110],b[110];
 4 char s1[110],s2[110];
 5 int f[110][110];
 6 int p[6][6]=     //初始化碱基之间的配对值
 7 {
 8     {0},
 9     {0,5,-1,-2,-1,-3},
10     {0,-1,5,-3,-2,-4},
11     {0,-2,-3,5,-2,-2},
12     {0,-1,-2,-2,5,-1},
13     {0,-3,-4,-2,-1,0}
14 };
15 int fuck(char c)//将字符转化为序号
16 {
17     if(c==‘A‘) return 1;
18     if(c==‘C‘) return 2;
19     if(c==‘G‘) return 3;
20      return 4;
21 }
22 int main()
23 {
24     //freopen("acgt.in","r",stdin);//文件输入输出
25     //freopen("acgt.out","w",stdout);//同上
26     int t,i,j;
27     scanf("%d%s%d%s",&l1,s1+1,&l2,s2+1);//输入(输入完后s1,s2的第一个字符在s[1]的位置)
28     for(i=1;i<=l1;i++)
29         for(j=1;j<=l2;j++)
30             f[i][j]=INT_MIN;//将f数组初始化为一个很小的值
31      for(i=1;i<=l1;i++)
32         a[i]=fuck(s1[i]);//将s1中的字符转化为序号存在数组a中
33     for(i=1;i<=l2;i++)
34         b[i]=fuck(s2[i]);//将s2中的字符转化为序号存在数组b中
35     for(i=1;i<=l1;i++)//将f数组赋初值
36         f[i][0]=f[i-1][0]+p[a[i]][5];
37     for(i=1;i<=l2;i++)//同上
38         f[0][i]=f[0][i-1]+p[b[i]][5];
39     for(i=1;i<=l1;i++)//DP方程(上面有讲)
40         for(j=1;j<=l2;j++)
41         {
42             f[i][j]=max(f[i][j],f[i][j-1]+p[b[j]][5]);
43             f[i][j]=max(f[i][j],f[i-1][j]+p[a[i]][5]);
44             f[i][j]=max(f[i][j],f[i-1][j-1]+p[a[i]][b[j]]);
45         }
46     printf("%d\n",f[l1][l2]);//输出
47     return 0;
48 }
时间: 2024-10-20 08:52:06

P1140 相似基因的相关文章

动态规划 洛谷P1140 相似基因

P1140 相似基因 题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了4种核苷酸,简记作A,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类基因工作组的任务中,生物学家研究的是:两个基因的相似程度.因为这个研究对疾病的治疗有着非同寻常的作用. 题目描述 两个基因的相似度的计算方法如下: 对于两个已知基因,例如AGTGATG和GTTAG,将它们的碱基互相对应.当然,中间可以加入一些空碱基-,例如: 这样,两个基因之间的相似度就可以用碱基之间相似度的

P1140 相似基因 (dp)

题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了44种核苷酸,简记作A,C,G,TA,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类基因工作组的任务中,生物学家研究的是:两个基因的相似程度.因为这个研究对疾病的治疗有着非同寻常的作用. 题目描述 两个基因的相似度的计算方法如下: 对于两个已知基因,例如AGTGATGAGTGATG和GTTAGGTTAG,将它们的碱基互相对应.当然,中间可以加入一些空碱基-,例如: 这样,两个基因之间的相似度就可以

推荐题目

二分 P2678 跳石头 P2440 木材加工 P1873 砍树 P1577 切绳子 P1824 进击的奶牛 P1316 丢瓶盖 UVA1555 Garland P1257 平面上的最接近点对 P1429 平面最近点对(加强版)(未完成) P1182 数列分段"Section II" P1281 书的复制(二分做法和上题一样,只是输出值变成了输出划分方式) 递推 P2386 放苹果 P1025 数的划分 DP&&MS P1091 合唱队形 P1140 相似基因 P144

字符串/序列类DP(一)

题目:P1279 字串距离 \(\text{蒟蒻在DP之路上求索着}\) 这道题让我想起了在一个数字串中添加若干乘号使得乘积最大的问题.我开始考虑在前\(i\)个字符中插入\(j\)个字符的最小距离.后来我发现我不会转移(泪).于是我打算一步一步,从分析开始找到其中的秘密. 思路 观察这道题是要求字符匹配然后求出最小的差值.因此相比于在字符串中插入空格,不如说是指定哪个字符与哪个字符配对,使得距离最小.于是我又联想到了P1140 相似基因,如果我们设\(f[i][j]\)表示A串中的前i个字符和

【麦当劳肯德基】是美国在中国的基因武器试验场

有些时候,一提肯德基,我真的控制不住自己的情绪.在这里,我只是以一种十分客观的态度把肯德基的一些内幕告诉大家,只希望每个中国人... 能真正认识肯得基.我慢慢说我的经历吧. 本人是个在外漂泊的大学生,说来惭愧,在外也认识了不少朋友.我的一个朋友的父亲是中国银行某市的一个高层领导,他和美国的肯德基之间有些合作的关系,一次高层领导之间的互访使我朋友的父亲有幸参观了肯德基的鸡厂. 那是个对外严重保密的地方,任何人都不能随便入内的.那天我和朋友也正在上自习,朋友突然接到他父亲的电话,是从美国打来的越洋电

《长寿的基因》:尝试挑战主流医学界的观点,态度不严谨,有点像民间科学家。2星。

作者的身份是严肃的学者,书中的观点有一部分作者明说是跟主流医学界不同的,作者给出了他的证据,但是没说主流医学界对他的证据的态度,如果按他在书中的说法,是逻辑严谨的,有理有据的.我的看法是这种情况作者应该先去学术界吵架,吵出个结果来再向非专业读者宣传.有的没明确说是否有违主流观点但以我的了解是的,基于作者的态度,剩下的观点我也都打问号.基于这个原因,这本书我给2星. 几个重要的观点是:铁是万恶之源:引发阿尔茨海默病的元凶之一,诱发糖尿病的最重要的因素,全麦食品不如精制谷物好,如果你能够消化乳糖,那

什么是基因间隔区和内含子?

基因间隔区:An Intergenic region (IGR) is a stretch of DNA sequences located between genes. Intergenic regions are a subset of Noncoding DNA. Occasionally some intergenic DNA acts to control genes nearby, but most of it has no currently known function. It

抗TNF治疗改变JIA患者PBMC基因表达谱,可预测疗效

抗TNF治疗改变JIA患者PBMC基因表达谱,可预测疗效 Moorthy LN, et al. ACR 2007. Presentation No:1713. 背景:我们假设儿童期发生的特发性关节炎(JIA)和SLE的基因表达谱是独特的,抗细胞因子或细胞毒药物将改变之,并可能有预测疗效的价值. 目的:利用核酸微阵列技术,分析Etanercept治疗JIA以及环孢霉素/Rituximab(COME)联合治疗SLE,对患者外周血单个核细胞(PBMC)基因表达谱的影响. 方法:共 有4例活动性JIA[

自私的基因读后感

我时常觉得对于我们现代中国人的为人处世影响最大的就是达尔文,只不过他是通社会达尔文主义间接的影响着我们.关于社会达尔文主义,相信大家都很熟悉它的核心理论“物竞天择,适者生存”,及在我们的这个社会当中就是要有竞争,就是要适者生存,弱肉强食也是非常正常的事情.而对于这种思想给予解释最为独特的一本书便是<自私的基因>了.在<自私的基因>中,作者将人与动物的绝大部分行为都解释为对于基因的一种自私行为.用作者的话来说便是:我们和其他一切动物都是我们自己的基因所创造的机器.关于这本书我由于以下