POJ 1458 入門dp LCS 最長公共子串行

2021-09-19 06:00:23 字數 739 閱讀 1738

題意:兩個字串求最長公共子串行

思路:dp[i][j]表示a串前i項和b串前j項的lcs.

遞推式:dp[i][j]=max(dp[i-1][j],dp[i][j-1],dp[i-1][j-1]+a[i]==b[j])

分別用a串前i-1項和b串前j項的lcs

a串前i-1項和b串前j項的lcs

a串前i-1項和b串前j-1項的lcs+1(如果a[i]==b[j]的話)

更新dp[i][j]即可

另外:從下標為1開始讀取字串和strlen的方法

scanf("%s %s",a+1,b+1);

int n=strlen(a+1),m=strlen(b+1);

**:

//毒瘤poj沒有#include//#define ****(x) std::cout<<"["<<#x<<"->"<#include#includeusing namespace std;

typedef long long ll;

const int m=2e5+5;

const int inf=1e9+5;

char a[1005];

char b[1005];

int dp[1005][1005];

int main()

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

}return 0;

}

poj1458解題報告

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

POJ 1458 動態規劃

題目演算法 動態規劃 可參考 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 關於本...

poj 1458 最長公共子串行

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