最长公共子串问题
#include <stdio.h>
#include <vector>
using namespace std;
vector<int> v1, v2;
int dp[120][120];
int _max(int a, int b){
return a>b ? a : b;
}
void func(int case_count){
int i, j;
for(i=1; i<=v1.size()-1; i++){
for(j=1; j<=v2.size()-1; j++){
if(v1[i] == v2[j]){
dp[i][j] = dp[i-1][j-1] + 1;
}
else{
dp[i][j] = _max(dp[i][j-1], dp[i-1][j]);
}
}
}
printf("Twin Towers #%d\n", case_count);
printf("Number of Tiles : %d\n\n", dp[v1.size()-1][v2.size()-1]);
}
int main(void){
int n1, n2;
int num;
int case_count;
//freopen("input.dat", "r", stdin);
case_count = 1;
while(scanf("%d %d", &n1, &n2), n1||n2){
v1.clear();
v1.push_back(0);
while(n1--){
scanf("%d", &num);
v1.push_back(num);
}
v2.clear();
v2.push_back(0);
while(n2--){
scanf("%d", &num);
v2.push_back(num);
}
func(case_count++);
}
return 0;
}