poj 1080(動態規劃)

2021-05-26 17:44:38 字數 1224 閱讀 5640

問題描述:

已知:有兩給定序列str1和str2,序列只由組成。現在序列中插入空格(用'-'表示),由於『-』可表示任意字元,故上述插入操作可使str1=str2,例如:

str1:agtgatg

str2:gttag

插入'-『後變為:

str1:agtgat-g

str2:-gt--tag

另外,str1和str2對應位置的一對字元有固定權值,如下圖所示。定義相似度為:所有字元對的權值之和

求:插入'-'可獲得的最大相似度

輸入:第1行為n;之後為n個case,每個case佔兩行,每行由乙個正整數(代表str長度)和乙個字串(代表str)組成

輸出:可獲得的最大相似度

sample input:

7 agtgatg

5 gttag

7 agctatt

9 agctttaaa

sample output:

思路:

首先,將可獲得最大相似度的已插入序列對從某處切開,易知若要使總體相似度最大,左右兩子部分的相似度也必須最大,即具有最優子結構

記e(i, j)為以子串行str1(1, i)和str2(1, j)為輸入所得的最大相似度,則有如下遞迴表示式

原問題最優解即為e(n1, n2)

**:

#include #include int score[5][5] = ,,,

,};

char str1[110], str2[110];

int seq1[110], seq2[110]; //將輸入的字串行轉換為對應於score陣列的下標索引,方便後面查詢權值

int case_n;

int n1, n2;

void dp()

} printf("%d\n", e[n1][n2]);

}int main()

} scanf("%d%s", &n2, str2);

for(int j = 0; j < n2; j++)

} dp();

} return 0;

}

POJ 1080 基因序列相似度計算 動態規劃

本題為典型的動態規劃,關鍵找出序列比對的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 ...

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...

poj 動態規劃 1141

dp練習的第三道題,依然花了我斷斷續續好幾個小時 有人說看到題目裡的 2.if s is a regular sequence,then s and s are both regular sequences.3.if a and b are regular sequences,then ab is ...