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;
}