Common Subsequence hdu

来源:互联网 发布:搜达数据 编辑:程序博客网 时间:2024/06/08 04:05
Common Subsequence
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u
Submit Status

Description

A subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = <x1, x2, ..., xm> another sequence Z = <z1, z2, ..., zk> is a subsequence of X if there exists a strictly increasing sequence <i1, i2, ..., ik> of indices of X such 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 index sequence <1, 2, 4, 6>. Given two sequences X and Y the problem is to find the length of the maximum-length common subsequence of X and Y. 
The program input is from a text file. Each data set in the file contains two strings representing the given sequences. The sequences are separated by any number of white spaces. The input data are correct. For each set of data the program prints on the standard output the length of the maximum-length common subsequence from the beginning of a separate line. 

Input

abcfbc abfcabprogramming contest abcd mnp

Output

420

Sample Input

abcfbc abfcabprogramming contest abcd mnp

Sample Output

420

 

 

最长子序列,大水题

 

 

 

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int dp[1000][1000];
int main()
{
    char s[1000],s1[1000];
    while(~scanf("%s%s",s+1,s1+1))
    {
        int n,n1;
        n=strlen(s+1);
        n1=strlen(s1+1);
        memset(dp,0,sizeof(dp));
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n1;j++)
        {
            if(s[i]==s1[j])
            dp[i][j]=dp[i-1][j-1]+1;
            else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
        }
        printf("%d\n",dp[n][n1]);
    }
    return 0;
}

0 0
原创粉丝点击