洛谷P1140 相似基因(線性DP

2022-05-27 08:33:14 字數 1984 閱讀 2875

大家都知道,基因可以看作乙個鹼基對序列。它包含了444種核苷酸,簡記作a,c,g,ta,c,g,ta,c,g,t。生物學家正致力於尋找人類基因的功能,以利用於診斷疾病和發明藥物。

在乙個人類基因工作組的任務中,生物學家研究的是:兩個基因的相似程度。因為這個研究對疾病的**有著非同尋常的作用。

兩個基因的相似度的計算方法如下:

對於兩個已知基因,例如agtgatgagtgatgagtgatg和gttaggttaggttag,將它們的鹼基互相對應。當然,中間可以加入一些空鹼基-,例如:

這樣,兩個基因之間的相似度就可以用鹼基之間相似度的總和來描述,鹼基之間的相似度如下表所示:

那麼相似度就是:(−3)+5+5+(−2)+(−3)+5+(−3)+5=9(-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(−3)+5+5+(−2)+5+(−1)+5=14。規定兩個基因的相似度為所有對應方法中,相似度最大的那個。

共兩行。每行首先是乙個整數,表示基因的長度;隔乙個空格後是乙個基因序列,序列中只含a,c,g,ta,c,g,ta,c,g,t四個字母。1≤1 \le 1≤序列的長度≤100 \le 100≤100。

僅一行,即輸入基因的相似度。

輸入 #1

7 agtgatg

5 gttag

輸出 #1這是一道線性dp題,藍書上說得好,如果乙個動態規劃的演算法包含多個維度,但在每個維度上都具有線性變化的階段,這同樣稱為線性dp。這道題一看有兩個字串,聯想到另一道題「編輯距離」,可以想到要開乙個二維陣列來儲存,即dp[i][j]表示a串的1到i個鹼基與b串的1到j個鹼基的相似度。狀態找到後開始寫轉移方程。由題意得,不考慮邊界的話一共有三種情況,即dp[i][j]可能等於:

1.dp[i-1][j-1]+rela(a[i],b[j]).這表示a[i]與b[j]兩個鹼基彼此配對,其中rela(p,q)表示鹼基p和鹼基q的相似度。

2.dp[i-1][j]+rela(a[i],' ').這表示a[i]與空鹼基配對。這裡要注意到動態規劃裡無後效性的概念,不用去管a的前i-1個鹼基與b的前j個鹼基如何配對,只需要分析眼前情況。

3.dp[i][j-1]+rela(b[j],' ').這表示b[j]與空鹼基配對。

最終要在這三者中取最大就得到轉移方程。輸出的答案存在dp[lena][lenb]中。lena,lenb分別表示a,b串的長度。

#include using

namespace

std;

char a[105],b[105

];int

lena,lenb;

int dp[210][210]=; //

dp[i][j]表示a的第i個與b的第j個到之前的相似度

mapm;

int pos=0

;int rela[5][5]=//

二維陣列儲存鹼基與鹼基之間的相似度

, ,,,

};int mmax(int a,int b,int

c)int

main()

for(j=1;j<=lenb;j++)

for(i=1;i<=lena;i++)}}

cout

/輸出答案。這裡注意不要習慣性的寫成dp[lena-1][lenb-1],再次回顧dp[i][j]的定義,是「第i個」

return0;

}

洛谷 P1140 相似基因(線性動態規劃)

題目背景 大家都知道,基因可以看作乙個鹼基對序列。它包含了44種核苷酸,簡記作a,c,g,ta,c,g,t。生物學家正致力於尋找人類基因的功能,以利用於診斷疾病和發明藥物。在乙個人類基因工作組的任務中,生物學家研究的是 兩個基因的相似程度。因為這個研究對疾病的 有著非同尋常的作用。題目描述 兩個基因...

洛谷P1140 相似基因

大家都知道,基因可以看作乙個鹼基對序列。它包含了4種核苷酸,簡記作a,c,g,t。生物學家正致力於尋找人類基因的功能,以利用於診斷疾病和發明藥物。在乙個人類基因工作組的任務中,生物學家研究的是 兩個基因的相似程度。因為這個研究對疾病的 有著非同尋常的作用。兩個基因的相似度的計算方法如下 對於兩個已知...

洛谷P1140 相似基因

大家都知道,基因可以看作乙個鹼基對序列。它包含了44種核苷酸,簡記作a,c,g,ta,c,g,t。生物學家正致力於尋找人類基因的功能,以利用於診斷疾病和發明藥物。在乙個人類基因工作組的任務中,生物學家研究的是 兩個基因的相似程度。因為這個研究對疾病的 有著非同尋常的作用。兩個基因的相似度的計算方法如...