简单的模板题,最长公子序列。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 105;
int dp[maxn][maxn];
int a[maxn],b[maxn];
int main()
{
int cas = 1;
int n1,n2;
while(~scanf("%d %d",&n1,&n2) && n1 && n2){
for(int i=1; i<=n1; ++i) scanf("%d",&a[i]);
for(int i=1; i<=n2; ++i) scanf("%d",&b[i]);
memset(dp,0,sizeof(dp));
for(int i=1; i<=n1; ++i){
for(int j=1; j<=n2; ++j){
if(a[i] == b[j]) dp[i][j] = dp[i-1][j-1] + 1;
else dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
}
}
printf("Twin Towers #%d\n",cas++);
printf("Number of Tiles : %d\n",dp[n1][n2]);
putchar('\n');
}
return 0;
}