C1148 - 最长公共子序列

题目描述

一个序列的子序列是指通过从给定序列中移除某些元素(可能没有移除任何元素)后得到的序列。给定一个序列 X = < x₁, x₂, ..., xₘ >,另一个序列 Z = < z₁, z₂, ..., zₖ > 是 X 的子序列,如果存在一个严格递增的索引序列 < i₁, i₂, ..., iₖ > 满足对所有 j = 1, 2, ..., k,有 xᵢⱼ = zⱼ。例如,Z = < a, b, f, c > 是 X = < a, b, c, f, b, c > 的一个子序列,对应的索引序列为 < 1, 2, 4, 6 >。给定两个序列 X 和 Y,问题是找出 X 和 Y 的最长公共子序列的长度。

输入格式

程序的输入来自标准输入。输入中的每组数据包含两个字符串,表示给定的序列。这两个序列之间由任意数量的空白字符分隔。输入数据均为合法数据。

输入以EOF作为结束标志

输出格式

对于每组数据,程序在标准输出中输出最长公共子序列的长度,每个结果占一行的开头位置。

样例 #1 输入

abcfbc         abfcab
programming    contest 
abcd           mnp

样例 #1 输出

4
2
0

数据范围与提示

100%的数据:每个字符串长度在1 - 5000之间

补充说明

字符串中不会包含空格,每个字符串由小写、大写英文字母组成

测试点数目

共10个测试点,每个测试点10分

时间与内存限制

每个测试点时间:1000ms(1.0s),内存:256MiB

输入输出模式

本OJ支持两种输入输出模式

1. 标准输入输出模式:
直接从标准输入和标准输出读写数据,不需要使用freopen进行文件输入输出重定向
2. 文件输入输出模式(国内信奥赛输入输出模式):
从文件中读写数据,需要使用freopen进行输入输出重定向
本题输入文件名为:C1148.in,输出文件名为:C1148.out