相似基因,二維的線性dp

2022-05-31 07:36:10 字數 1066 閱讀 4205

時間限制:1.0s 空間限制:2.5mb;

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

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

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

agtgat-g

-gt--tag

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

那麼相似度就是:(-3)+5+5+(-2)+(-3)+5+(-3)+5=9。因為兩個基因的對應方法不唯一,例如又有:

agtgatg

-gtta-g

相似度為:(-3)+5+5+(-2)+5+(-1)+5=14。規定兩個基因的相似度為所有對應方法中,相似度最大的那個。

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

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

樣例輸入:

7 agtgatg

5 gttag

輸出:14

通過讀題我們發現,這就是構造出兩個串的最大相似度

這種問題,我們通過dp來構造

設dp(i,j)為第乙個串的前i個,和第j個所所能構造出題目的要求的最大相似度·

所以dp(i,j)=min(dp(i-1.j-1)+c[i][j],dp(i-1,j)+c[i][-],dp(i,j-1)+c[-][j]);

如下是**

#include#include

using

namespace

std;

int num[85][85],minn[101][101

],n1,n2;

char a1[101],a2[101

];int

main()

平面二維DP

馬攔過河卒 原題傳送門 這一到題目也是比較基礎的動態規劃,也可以理解為是遞推,主要是運用加法原理,思維難度不大。我們要求從 0,0 到 n,n 的方案總數,如果沒有馬的話,我們可以這麼做 設 f i j 為從 0,0 走到 i,j 的方案總數,我們知道一定是有上面和左邊走來,所以只需要累加上面和左邊...

完美序列(二維dp)

題目描述 已知乙個長度為l的序列 b1,b2,b3,bl 1 b1 b2 b3 bl n 若這個序列滿足每個元素是它後續元素的因子,換句話說就是對於任意的i 2 i l 都滿足bi bi 1 0 其中 代表求餘 則稱這個序列是完美的。你的任務是對於給定的n和l,計算出一共有多少序列是完美序列。由於答...

二維取數dp

acwing 1027.方格取數 對於走一次,容易得到狀態轉移方程為 f i j max f i 1 j f i j 1 w i j 而對於走兩次時,設定狀態為 f i 1 j 1 i 2 j 2 表示第一條路徑從 1,1 走到 i 1,j 1 第二條路徑從 1,1 走到 i 2,j 2 取的數的最...