洛谷P1140 相似基因

2022-04-06 03:26:08 字數 1354 閱讀 9215

本題一看就知道是一道動歸,其實和字串距離非常的像,只不過多了題目規定的匹配相似度罷了。

int shuzu[6][6]=,,,,,};
ps:換行效果更佳。

int start(char c)

然後直接在主函式中呼叫即可

for(int i=0;i其中s1,s2均為讀入的字串,我們把它們分別逐字元轉化放入a,b陣列。

for(int i=1;i<=n;i++)

}

然後就是關鍵的動歸核心部分了。

首先,看到資料範圍:100

受到啟發:二位陣列開的起,再加上字串距離的引導,我們很容易想到f[i

][j]

f[i]

[j]可以表示第乙個字串的前i個字元與第二個字串的前j個字元匹配的最大值。

狀態想出來,那麼方程如何轉移呢?

根據可以加入空鹼基,我們能想到f[

i][j

]=ma

x(f[

i][j

],f[

i−1]

[j]+

shuz

u[a[

i]][

5],f

[i][

j−1]

+shu

zu[b

[j]]

[5],

f[i−

1][j

−1]+

shuz

u[a[

i]][

b[i]

]f[i

][j]

=max

(f[i

][j]

,f[i

−1][

j]+s

huzu

[a[i

]][5

],f[

i][j

−1]+

shuz

u[b[

j]][

5],f

[i−1

][j−

1]+s

huzu

[a[i

]][b

[i]]

分別是s1串的最後乙個字元對應乙個空字元,s2串的最後乙個字元對應乙個空字元,s1串個s2串的最後乙個字元直接對應。

顯而易見的,初始化f陣列就是

for(int i=1;i<=n;i++)f[i][0]=f[i-1][0]+shuzu[a[i]][5];

for(int i=1;i<=m;i++)f[0][i]=f[0][i-1]+shuzu[b[i]][5];

然後把它們拼湊起來,就完工嘍!

完結撒花~

洛谷P1140 相似基因

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

洛谷P1140 相似基因

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

洛谷P1140 相似基因

本題一看就知道是一道動歸,其實和字串距離非常的像,只不過多了題目規定的匹配相似度罷了。int shuzu 6 6 ps 換行效果更佳。int start char c 然後直接在主函式中呼叫即可 for int i 0 i其中s1,s2均為讀入的字串,我們把它們分別逐字元轉化放入a,b陣列。for ...