题目大意:求两个字符串的最长公共子序列的长度。
分析:这是一个典型的dp入门题,LCS。
代码:
#include<bits/stdc++.h> using namespace std; const int maxn = 1e3+7; char a[maxn],b[maxn]; int dp[maxn][maxn]; void Dp() { int n = strlen(a); int m = strlen(b); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (a[i] == b[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]); } } } int main() { int n, m; cin >> n >> m; cin >> a >> b; Dp(); cout << dp[n][m] << endl; return 0; }