POJ 1458 動態規劃

2021-08-31 06:50:48 字數 805 閱讀 3080

題目演算法:動態規劃;可參考:https:

狀態轉移方程:

設輸入的兩個字串為s1和s2,那麼用來儲存他們最長公共自序列的長度,則:

if(s1[i-1]==s2[j-1])	sum[i][j]=sum[i-1][j-1]+1; // 狀態轉移方程 

else sum[i][j]=max(sum[i-1][j],sum[i][j-1]);

關於本題狀態轉移方程的解釋:

請參考:https:

下面放上ac**:

//peking university online judge 1458

//algorithm: lcs

#include#include#define max 1000

int max(int,int); //求最大值

void maxsum(int,int); //求最大的和

void initzero(int,int);//將sum中的數全化為0

char s1[max],s2[max];

int sum[max][max]; //用來儲存算出來的和(用空間換時間,lcs的精華所在)

int main()

return 0;

}void maxsum(int len1,int len2)

printf("%d\n",sum[len1][len2]);

}void initzero(int len1,int len2)

int max(int a,int b)

poj1458解題報告

最長公共字串匹配 看到他們的寫的很短很精練,真心感覺自己寫不出來,我就走我的平淡路線吧!include include using namespace std int substr 201 201 記錄到當前位置的最大匹配數 string str1,str2 intmmax int a,int b ...

poj 1458 最長公共子串行

common subsequence 題意 一行給出兩個字串s1和s2,找出他們的最長 公共子串行數量,乙個金典的動態規劃問題。用dp i j 表示字串s1取前i個,字串s2取前j個時,他們的最長公共子串行數量有多少。當s2右端又加入了乙個字元時,即表示為dp i j 1 時,如果s1 i 和s2 ...

POJ1458最長公共子串行

為了完成poj中的一題 spell checker 要寫乙個最長公共子串行的程式,居然突然全給忘了,楞是沒有寫出來,深深的鄙視自己一下。這也是一道動態規劃的典型題。遞迴實現如下 poj提交會超時,但是確實可以實現 using namespace std define max a b a b a b ...