noj1041 最長公共子串行

2021-10-10 14:59:53 字數 1062 閱讀 2453

1041.最長公共子串行

時限:1000ms 記憶體限制:200000k 總時限:3000ms

描述乙個給定序列的子串行是在該序列中刪去若干元素後得到的序列。確切地說,若給定序列x=,則另一串行z=是x的子串行是指存在乙個嚴格遞增的下標序列 ,使得對於所有j=1,2,…,k有:

xij = zj

如果乙個序列s即是a的子串行又是b的子串行,則稱s是a、b的公共子串行。

求a、b所有公共子串行中最長的序列的長度。

輸入輸入共兩行,每行乙個由字母和數字組成的字串,代表序列a、b。a、b的長度不超過200個字元。

輸出乙個整數,表示最長各個子串行的長度。

格式:printf("%d\n");

輸入樣例

programming

contest

輸出樣例2提示

#include

#include

#include

#define max(x,y) ((x)>(y)?(x):(y))

///分析,首先獲得字串c1,c2,並用strlen獲得其長度

///然後建立遞推關係 if(c1[i]==c2[j]) map[i+1][j+1]=map[i][j+1]+1;

///else map[i+1][j+1]=max(map[i+1][j],map[i][j+1];

///邊界條件,邊框值為0

char c1[

1000

],c2[

1000];

int m,n;

int map[

1000][

1000];

void

getdata()

for(

int j=

0;j<=n;j++)}

///實現動態規劃的過程,map[i][j]在c1的第i個字元和c2的第j個字元上的最長公共子串行長度

voiddp(

)else}}

}void

print()

intmain

(void

)

NOJ1041 演算法實驗四 最長公共子串行

時限 1000ms 記憶體限制 200000k 總時限 3000ms 描述乙個給定序列的子串行是在該序列中刪去若干元素後得到的序列。確切地說,若給定序列x 則另一串行z 是x的子串行是指存在乙個嚴格遞增的下標序列 使得對於所有j 1,2,k有 xij zj 如果乙個序列s即是a的子串行又是b的子串行...

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

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 當然我們現在一眼就可以看出來最長公...