hdu1080 最長公共子串行變形

2021-07-24 22:04:47 字數 998 閱讀 5185

給定乙個相似性矩陣

給定兩個基因序列(由agct組成),填充空格『 』,使得相似性分數最高

狀態轉移,其中dp[i,j]表示s1[i]和s2[j]處能取到的最大分數(i=1,2,3...len1,j=1,2,3,..,len2)

dp[i,j]=max(max(dp[i-1,j-1]+table[i,j],dp[i,j-1]+table[i]['-']),dp[i-1,j]+table['-'][j])
注意初始化

for(int i=1;i<=l1;i++)  dp[i][0]=dp[i-1][0]+table[t1[i]][4];

for(int i=1;i<=l2;i++) dp[0][i]=dp[0][i-1]+table[4][t2[i]];

**

#include #include using namespace std;

const int maxn=105;

int table[5][5]=,,,

,};int transfer(char c)

int main()

scanf("%d ",&l2);

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

dp[0][0]=0;

for(int i=1;i<=l1;i++) dp[i][0]=dp[i-1][0]+table[t1[i]][4];//注意開頭是可以填空格的

for(int i=1;i<=l2;i++) dp[0][i]=dp[0][i-1]+table[4][t2[i]];

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

}printf("%d\n",dp[l1][l2]);

}return 0;

}

POJ 1080(最長公共子串行)

一道最長公共子串行變形的題目。關於那個 沒想到很好的處理方式,直接打表了。最長公共子串行的狀態轉移方程 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...

最長公共子串行 最長公共子串

1 最長公共子串行 採用動態規劃的思想,用乙個陣列dp i j 記錄a字串中i 1位置到b字串中j 1位置的最長公共子串行,若a i 1 b j 1 那麼dp i j dp i 1 j 1 1,若不相同,那麼dp i j 就是dp i 1 j 和dp i j 1 中的較大者。class lcs el...

最長公共子串行 最長公共子串

1.區別 找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。而最長公共子串行則並不要求連續。2 最長公共子串 其實這是乙個序貫決策問題,可以用動態規劃來求解。我們採用乙個二維矩陣來記錄中間的結果。這個二維矩陣怎麼構造呢?直接舉個例子吧 bab 和 caba 當然我們現在一眼就可以看出來最長公...