http://poj.org/problem?id=1458
经典dp 将数组从下标1开始 可以不用特殊处理第一个数据
strlen(a+1) 而不是 strlen(a)
scanf 以 %s 形式 自动忽略空格 回车输入缓冲


#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> const int maxn = 1000; char a[maxn], b[maxn]; int dp[maxn][maxn]; int max(int a, int b) { return a>=b ?a :b ; } int main() { while(scanf("%s %s", a+1, b+1)!=EOF) { int lena = strlen(a+1); int lenb = strlen(b+1); memset(dp, 0, sizeof(dp)); for(int i=1; i<=lena; i++) for(int j=1; j<=lenb; j++) { dp[i][j] = max(dp[i-1][j], dp[i][j-1]); if( a[i] == b[j] ) dp[i][j] = max(dp[i][j], dp[i-1][j-1]+1); } printf("%d\n", dp[lena][lenb]); } return 0; }