例题: http://acm.hdu.edu.cn/showproblem.php?pid=1159
#include<bits/stdc++.h> using namespace std; const int N = 5000 + 10; char a[N], b[N]; int dp[2][N]; int main() { int n; while(~scanf("%s%s", a, b)) { memset(dp, 0, sizeof(dp)); int la = strlen(a), lb = strlen(b); for(int i = 1;i <= la; i++) { for(int j = 1;j <= lb; j++) { if(a[i - 1] == b[j - 1]) dp[i % 2][j] = dp[(i - 1) % 2][j - 1] + 1; else dp[i % 2][j]= max(dp[(i - 1) % 2][j], dp[i % 2][j - 1]); //printf("%d ", dp[i % 2][j]); } //printf("\n"); } printf("%d\n", dp[la % 2][lb]); } }