最长公共子序列问题(LCS)
给两个字符串,求最长公共子序列。
这算是最简单的dp了吧,直接上代码吧,看一遍就懂。
#include <stdio.h>
#include <string.h>
#define max(x,y) ((x)>(y)?(x):(y))
int dp[1005][1005];
int main() {
char s[1005], t[1005];
memset(dp, 0, sizeof(dp));
scanf("%s", s);
scanf("%s", t);
int n = strlen(s);
int m = strlen(t);
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]);
}
}
}
printf("%d\n",dp[n][m]);
return 0;
}