杭电1159——Common Subsequence

来源:互联网 发布:数据采集卡原理设计 编辑:程序博客网 时间:2024/06/02 05:17
Problem Description
A subsequence of a given sequence is the given sequence withsome elements (possible none) left out. Given a sequence X =<x1, x2, ..., xm> another sequence Z= <z1, z2, ..., zk> is a subsequenceof X if there exists a strictly increasing sequence<i1, i2, ..., ik> of indices of Xsuch that for all j = 1,2,...,k, xij = zj. For example, Z =<a, b, f, c> is a subsequence of X =<a, b, c, f, b, c> with indexsequence <1, 2, 4, 6>. Given twosequences X and Y the problem is to find the length of themaximum-length common subsequence of X and Y.
The program input is from a text file. Each data set in the filecontains two strings representing the given sequences. Thesequences are separated by any number of white spaces. The inputdata are correct. For each set of data the program prints on thestandard output the length of the maximum-length common subsequencefrom the beginning of a separate line.
 
Sample Input
abcfbc abfcab
programming contest
abcd mnp
Sample Output
4 2 0
# include<stdio.h>
# include<string.h>
int num[1001][1001];
int main()
{
    int i,j,len1,len2,a,b;
    char s1[1000],s2[1000];
    while(scanf("%s%s",s1+1,s2+1)!=EOF)
    {
        len1=strlen(s1+1);
        len2=strlen(s2+1);
        for(i=0;i<len1+1;i++)
            num[i][0]=0;
        for(i=0;i<len2+1;i++)
            num[0][i]=0;
        for(i=1;i<=len1;i++)
            for(j=1;j<=len2;j++)
            {
                if(s1[i]==s2[j])
                  num[i][j]=num[i-1][j-1]+1;
                 else
                 {
                     a=num[i][j-1];
                     b=num[i-1][j];
                     if(a>b)
                         num[i][j]=a;
                     else
                         num[i][j]=b;
                 }
            }
        printf("%d\n",num[len1][len2]);
    }
    return 0;
}
 

 

0 0
原创粉丝点击