最长公共子序列
AC代码如下:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
int main(){
char a[1000], b[1000];
int dp[2][1000];
while( scanf( "%s%s", &a[1], &b[1] ) != EOF ){
memset( dp, 0, sizeof( dp ) );
int lengtha = strlen( a + 1 ), lengthb = strlen( b + 1 ), pos = 0;
for( int i = 1; i <= lengtha; i++ ){
for( int j = 1; j <= lengthb; j++ ){
if( a[i] == b[j] ){
dp[pos][j] = dp[pos^1][j-1] + 1;
}
dp[pos][j] = max( max( dp[pos^1][j], dp[pos][j-1] ), dp[pos][j] );
}
pos ^= 1;
}
pos ^= 1;
cout << dp[pos][lengthb] << endl;;
}
return 0;
}