本題為典型的動態規劃,關鍵找出序列比對的3個不同情況,即子問題
設d[i][j]為取s1第i個字元,s2第j個字元時的最大分值
則決定p為最優的情況有三種 p陣列為分數矩陣
1、 s1取第i個字母,s2取「 - 」: d[i-1][j]+p[ s1[i-1] ]['-'];
2、 s1取「 - 」,s2取第j個字母:d[i][j-1]+p['-'][ s2[j-1] ];
3、 s1取第i個字母,s2取第j個字母:d[i-1][j-1]+p[ s1[i-1] ][ s2[j-1] ];
即dp[i][j]為上述三種情況的最大值
易犯錯誤
1、p陣列的初始化,不細心的話容易犯錯(因為這個低階錯誤wa兩次- -)
2、d[0][j],d[i][0],d[0][0]邊界值的賦值
source code
problem:1080
user:yangliuacmer
memory:568k
time:0ms
language:c++
result:accepted
#include using namespace std; #define maxlen 200 #define mininf -1; int max3(int x, int y, int z) int main() for(i = 1; i < len2; i++) for(i = 1; i <= len1; i++) } cout< 問題描述 已知 有兩給定序列str1和str2,序列只由組成。現在序列中插入空格 用 表示 由於 可表示任意字元,故上述插入操作可使str1 str2,例如 str1 agtgatg str2 gttag 插入 後變為 str1 agtgat g str2 gt tag 另外,str1和str2對應... 一道最長公共子串行變形的題目。關於那個 沒想到很好的處理方式,直接打表了。最長公共子串行的狀態轉移方程 if a i b i dp i j dp i 1 j 1 1 else dp i j max dp i 1 j dp i j 1 這道題需要做一下變形 s1取字母,s2取字母 dp i 1 j 1... 基因序列相似性問題 time limit 5s memory limit 32m accepted submit 47 total submit 451 genotype 是乙個有限的基因序列集。它的每個成員都是由大寫的英文本母a z組成,不同的字母表示不同種類的基因。乙個基因種類可以分化成為若干新...poj 1080(動態規劃)
POJ 1080(最長公共子串行)
動態規劃 基因序列相似性問題