生疏了哎。。。
AC代码如下:
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <cstring>
using namespace std;
int main(){
int dp[101][101];
string s[101][101];
string a, b;
int T, Case = 1;
cin >> T;
while( T-- ){
cin >> a >> b;
memset( dp, 0, sizeof( dp ) );
for( int i = 0; i <= 100; i++ ){
for( int j = 0; j <= 100; j++ ){
s[i][j] = "";
}
}
for( int i = 1; i <= a.size(); i++ ){
for( int j = 1; j <= b.size(); j++ ){
if( a[i-1] == b[j-1] ){
dp[i][j] = dp[i-1][j-1] + 1;
s[i][j] = s[i-1][j-1] + a[i-1];
}else{
if( dp[i-1][j] > dp[i][j-1] ){
dp[i][j] = dp[i-1][j];
s[i][j] = s[i-1][j];
}else if( dp[i-1][j] < dp[i][j-1] ){
dp[i][j] = dp[i][j-1];
s[i][j] = s[i][j-1];
}else{
if( s[i-1][j] < s[i][j-1] ){
dp[i][j] = dp[i-1][j];
s[i][j] = s[i-1][j];
}else{
dp[i][j] = dp[i][j-1];
s[i][j] = s[i][j-1];
}
}
}
}
}
cout << "Case " << Case++ << ": ";
if( s[a.size()][b.size()].size() > 0 ){
cout << s[a.size()][b.size()] << endl;
}else{
cout << ":(" << endl;
}
}
}