http://acm.hdu.edu.cn/showproblem.php?pid=1159
=w=, 套公式就行啦。
#include <iostream>
#include <string.h>
using namespace std;
#define N 10005
char a[N],b[N];
int c[N][N];
int max(int a,int b){
return a>=b?a:b;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("1159in.txt","r",stdin);
#endif
int i,j,len_a,len_b;
while (scanf("%s%s",a,b)!=EOF){
len_a=strlen(a);
len_b=strlen(b);
for (i=0;i<len_a;i++)
c[i][0]=0;
for (j=0;j<len_b;j++)
c[0][j]=0;
for (i=0;i<len_a;i++)
for (j=0;j<len_b;j++){
if (a[i]==b[j])
c[i+1][j+1]=c[i][j]+1;
else c[i+1][j+1]=max(c[i][j+1],c[i+1][j]);
}
printf("%d\n",c[len_a][len_b]);
}
return 0;
}