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