題意:兩個字串求最長公共子串行
思路: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 ...