POJ 1080(最長公共子串行)

2021-07-09 19:39:13 字數 824 閱讀 8103

一道最長公共子串行變形的題目。

關於那個**,沒想到很好的處理方式,直接打表了。

最長公共子串行的狀態轉移方程:

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]+f[s1[i]][s2[j]]

s1取'-',s2取字母:dp[i][j-1]+f['-'][s2[j]]

s1取字母,s2取'-':dp[i-1][j]+f[s1[i]]['-']

dp[i][j]等於三者的最大值。

在求解之前,需要初始化:

dp[0][0]=0;

dp[i][0]=dp[i-1][0]+f[s1[i]]['-'];

dp[0][j]=dp[0][j-1]+f['-'][s2[j]];

#include#include#includeusing namespace std;

const int inf=0x3f3f3f3f;

const int maxn=105;

int t,n,m;

char s1[maxn],s2[maxn];

int dp[maxn][maxn],f[maxn][maxn];

void work()

void initdata()

int main()

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

}return 0;

}

poj 最長公共子串行和最長公共子串

最長公共子串行 poj1458 問題描述 給出兩個字串,求出這樣的乙個最長的公共子串行的長度 子串行中的每個字元都能在兩個原串中找到,而且每個字元的先後順序和原串中的先後順序一致。sample input abcfbc abfcab programming contest abcd mnp samp...

hdu1080 最長公共子串行變形

給定乙個相似性矩陣 給定兩個基因序列 由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 ...

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

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