最长公共子序列问题
状态转移方程:
F[i][j]=F[i-1][j-1]+1 (a[i] == b[j]);
F[i][j]=max(F[i-1][j],F[i][j-1]) (a[i] != b[j]);
#include <queue>
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
char str1[1010],str2[1010];
int dp[1010][1010];
int main(){
// freopen("in.txt", "r", stdin);
while(scanf("%s", str1) != EOF){
scanf("%s", str2);
int l1 = strlen(str1), l2 = strlen(str2);
dp[0][0] = dp[0][1] = dp[1][0] = 0;
for(int i=1; i<=l1; i++){
for(int j=1; j<=l2; j++){
if(str1[i - 1] == str2[j - 1])
dp[i][j] = dp[i - 1][j - 1] + 1;
else
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
}
}
printf("%d\n", dp[l1][l2]);
}
return 0;
}