http://poj.org/problem?id=1458
#include<iostream>
using namespace std;
#define N 1000
char str1[N],str2[N];
char lcs[N];
int c[N][N];
int flag[N][N];
int getLCSlength(const char *s1, const char *s2)
{
int i,j;
int len1 = strlen(s1);
int len2 = strlen(s2);
for(i=1;i<=len1;i++)
c[i][0] = 0;
for(i=0;i<=len2;i++)
c[0][i] = 0;
for(i=1;i<=len1;i++)
for(j=1;j<=len2;j++)
{
if(s1[i-1]==s2[j-1])
{
c[i][j] = c[i-1][j-1] +1;
flag[i][j] = 0;
}
else if(c[i-1][j]>=c[i][j-1])
{
c[i][j] = c[i-1][j];
flag[i][j] = 1;
}
else
{
c[i][j] = c[i][j-1];
flag[i][j] = -1;
}
}
return c[len1][len2];
}
int main()
{
while(cin>>str1>>str2)
{cout<<getLCSlength(str1,str2)<<endl;}
return 0;
}