buct oj 最大公共子序列问题

来源:互联网 发布:中医人工智能系统 编辑:程序博客网 时间:2024/05/20 01:44

问题 B 最大公共子序列问题

时间限制: 1 Sec  内存限制: 128 MB
[提交]

题目描述

对序列X=(x1, x2, .., xm),定义其子序列为(xi1, xi2, .., xik),i1<i2<..<ik。 请计算两个序列X=(x1, x2, .., xm),Y=(y1, y2, .., yn)的最长公共子序列的长度。

输入

输入为若干行,每行是一个计算题目,每行包括两个长度不超过100的字符串,中间用空格隔开。

输出

对每一行中的两个字符串,计算并输出其最大公共子序列的长度。 每一行输入的计算结果输出一行。

样例输入

a aa ababcd dcbaabcd bcabcdef aabacfe

样例输出

11124
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm>using namespace std;int dp[1005][1005];int main(){    char a[1005];    char b[1005];    while(~scanf("%s",a)){        scanf("%s",b);        int i,j,k;        for(i=0;i<=strlen(a);i++){            dp[i][0]=0;        }        for(i=0;i<=strlen(b);i++){            dp[0][i]=0;        }        for(i=1;i<=strlen(a);i++){            for(j=1;j<=strlen(b);j++){                if(a[i-1]==b[j-1]){                    dp[i][j]=dp[i-1][j-1]+1;                }                else if(dp[i-1][j]>=dp[i][j-1]){                    dp[i][j]=dp[i-1][j];                }                else{                    dp[i][j]=dp[i][j-1];                }            }        }        printf("%d\n",dp[strlen(a)][strlen(b)]);    }    return 0;}




0 0
原创粉丝点击