最长公共子序列(DP)

xiaoxiao2021-02-27  220

dp[i][j]表示s串的前i个字符和t串的前j个字符的最长公共子序列 则当s[i]==t[j]时,dp[i+1][j+1]=dp[i][j]+1 当s[i]!=t[j]时,dp[i + 1][j + 1] = max(dp[i][j + 1], dp[i + 1][j]);

#define clr(a,x) memset(a,x,sizeof a) char s[maxn],t[maxn]; int n, m; int dp[maxn][maxn]; void solve() { clr(dp, 0); for(int i=0;i<n;i++) for (int j = 0; j < m; j++) { if (s[i] == t[j]) dp[i + 1][j + 1] = dp[i][j] + 1; else { dp[i + 1][j + 1] = max(dp[i][j + 1], dp[i + 1][j]); } } cout << dp[n][m] << endl; }
转载请注明原文地址: https://www.6miu.com/read-11292.html

最新回复(0)