经典的dp模型,需要反向递推。
#include <iostream>
#include <limits>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
using namespace std;
const int size = 1000 + 10;
int d[size][size];
char a[size] , b[size];
int dp(int x , int y)
{
if(d[x][y]>=0) return d[x][y];
if(a[x-1] == b[y-1]) return d[x][y] = dp(x-1 , y-1) + 1;
else return d[x][y] = max(dp(x , y-1) , dp(x-1 , y));
}
int main()
{
while(fgets(a , size , stdin) && fgets(b , size , stdin))
{
int a_len = strlen(a);
int b_len = strlen(b);
memset(d , -1 , sizeof(d));
for(int i = 0 ; i < size ; ++i)
d[i][0] = d[0][i] = 0;
int r = dp(a_len - 1 , b_len - 1);
printf("%d\n" , r);
}
return 0;
}