您的位置:首页 > 其它

【UVA】10066-The Twin Towers(最长公共子串问题)

2014-08-06 08:36 417 查看
赤裸裸的最长公共子串问题,没什么好说的,注意的是,每组数据后面都有一个空行。

1399601910066The Twin TowersAcceptedC++0.0152014-08-06 00:34:53
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXD 100 + 10
int dp[MAXD][MAXD];
int N1,N2,Case = 1;
int arr1[MAXD];
int arr2[MAXD];
void init(){
    memset(dp,0,sizeof(dp));
    return ;
}
void DP(){
    init();
    for(int i = 1; i <= N1 ; i++){
        for(int j = 1 ; j <= N2 ; j++)
            if(arr2[j] == arr1[i])
                dp[i][j] = max(dp[i][j],dp[i - 1][j - 1] + 1);
            else
                dp[i][j] = max(max(dp[i][j],dp[i - 1][j]),max(dp[i][j],dp[i][j - 1]));
    }
    printf("Twin Towers #%d\n",Case++);
    printf("Number of Tiles : %d\n",dp[N1][N2]);
    printf("\n");
}
int main(){
    while(scanf("%d%d",&N1,&N2)){
        if(!N1 && !N2)
            break;
        for(int i = 1 ; i <= N1 ; i ++)
            scanf("%d",&arr1[i]);
        for(int i = 1; i <= N2 ; i++)
            scanf("%d",&arr2[i]);
        DP();
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: