相似基因(洛谷-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
源代碼
#include<iostream> #include<string> using namespace std;int max(int x,int y) {if(x>y)return x;elsereturn y; }int main() { int calculate[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 a,b;//基因長度string gene_a,gene_b;//基因序列int num_a[110],num_b[110];//用于將基因序列轉為編碼存儲的數組int dp[110][110]={0};//初始化int i,j;cin>>a>>gene_a;//基因序列acin>>b>>gene_b;//基因序列bfor(int i=1;i<=a;i++)for(int j=1;j<=b;j++)dp[i][j]=-1e8; //初始化為一極小值for(i=1;i<=a;i++)//將基因序列a轉為題設所給相似度表格中的數字代碼{if(gene_a[i-1]=='A') num_a[i]=0;if(gene_a[i-1]=='C') num_a[i]=1;if(gene_a[i-1]=='G') num_a[i]=2;if(gene_a[i-1]=='T') num_a[i]=3;}for(i=1;i<=b;i++)//將基因序列b轉為題設所給相似度表格中的數字代碼{if(gene_b[i-1]=='A') num_b[i]=0;if(gene_b[i-1]=='C') num_b[i]=1;if(gene_b[i-1]=='G') num_b[i]=2;if(gene_b[i-1]=='T') num_b[i]=3;}/*特判情況第一個基因第1個與第二個基因第0個匹配時,與空堿基匹配的值相同,可視為與空堿基匹配同理,第二個基因第1個與第一個基因第0個匹配時,與空堿基匹配的值相同*/for(i=1;i<=a;i++) dp[i][0]=dp[i-1][0]+calculate[num_a[i]][4];for(i=1;i<=b;i++) dp[0][i]=dp[0][i-1]+calculate[num_b[i]][4];/*比較堿基對相似度,共三種情況:①不插入空堿基,直接進行配對②序列a不變,在序列b中插入空堿基③序列b不變,在序列a中插入空堿基*/for(i=1;i<=a;i++){for(j=1;j<=b;j++){dp[i][j]=max( dp[i][j] , dp[i][j-1]+calculate[ num_b[j] ][4] );//序列a中插空堿基 dp[i][j]=max( dp[i][j] , dp[i-1][j]+calculate[ num_a[i] ][4] );//序列b中插空堿基dp[i][j]=max( dp[i][j] , dp[i-1][j-1]+calculate[ num_a[i] ][ num_b[j] ] );//不插入直接配對}}cout<<dp[a][b];return 0; }?
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的相似基因(洛谷-P1140)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 训练日志 2018.9.12
- 下一篇: 暑期训练日志----2018.7.30