buct oj 最大公共子序列问题

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

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

题目描述

对序列X=(x 1, x 2, .., x m),定义其子序列为(x i1, x i2, .., x ik),i11, x 2, .., x m),Y=(y 1, y 2, .., y n)的最长公共子序列的长度。

输入

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

输出

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

样例输入

a aa ababcd dcbaabcd bcabcdef aabacfe

样例输出

11124
#include
#include
#include
#include
#include
#include
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;
}




你可能感兴趣的:(动态规划)