考察知识:动态规划
#include <iostream>
using namespace std;
int c[1000][1000];
int lcs(char* x, char* y, int m, int n) {
int i,j;
for (i = 0; i < m; i++)
c[i][0] = 0;
for (i = 0; i < n; i++)
c[0][i] = 0;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++) {
if (x[i] == y[j] ) {
if (i >= 1 && j >= 1)
c[i][j] = c[i - 1][j - 1] + 1;
else
c[i][j] = 1;
} else if (c[i - 1][j] >= c[i][j - 1]) {
if (i >= 1)
c[i][j] = c[i - 1][j];
else
c[i][j] = 0;
} else {
if (j >= 1)
c[i][j] = c[i][j - 1];
else
c[i][j] = 0;
}
//cout << "i" << i << "j" << j << "value" << c[i][j] << endl;
}
//cout << x << y <<"m"<< m <<"n"<< n <<endl;
return c[m - 1][n - 1];
}
int main(int argc, char *argv[])
{
char* input1 = new char[1000];
char* input2 = new char[1000];
while (cin >> input1 >> input2) {
cout << lcs(input1, input2, strlen(input1), strlen(input2)) << endl;
}
delete input1;
delete input2;
return 0;
}