#P2543. [AHOI2004] 奇怪的字符串

[AHOI2004] 奇怪的字符串

题目描述

一天,爷爷给了小可可一个密码盒,盒子上有两行字符串:

0101010101001010101010 0000001111100000011111

爷爷告诉小可可,打开盒子的密码就是这两行字符串的最长公共子序列的长度。

小可可上网找到关于最长公共子序列的定义,描述如下:

一个给定序列的某个子序列即给定的序列再去掉几个元素(可能一个也不去掉),也就是给定一序列 X=<x1,x2,,xm>X=<x_1,x_2,\dots,x_m>,另一序列 Z=<z1,z2,,zk>Z=<z_1,z_2,\dots,z_k>XX 的子序列,如果存在 XX 的一个严格递增下标序列 <i1,i2,,ik><i_1,i_2,\dots,i_k> 使得对所有的 j=1,2,,kj=1,2,\dots,kxij=zjx_{i_j}=z_j。例如, z=<B,C,D,B>z=<B,C,D,B> 就是 X=<A,B,C,B,D,A,B>X=<A,B,C,B,D,A,B> 的一个子序列,相应的下标序列为 <2,3,5,7><2,3,5,7>。其中,AABBCCDD 均为字符 00 或者 11

例如:当 X=<1,1,1,0>,Y=<1,0,0,0,0,1,0,0,0>X=<1,1,1,0>,Y=<1,0,0,0,0,1,0,0,0> 时,最长公共子序列为 110110,其长度为 33;当 X=<1,0,1,0,0,0,1>,Y=<0,0,0,0,1,1,1>X=<1,0,1,0,0,0,1>,Y=<0,0,0,0,1,1,1> 时,最长公共子序列为 0000100001,其长度为 55

请你帮小可可编写程序找到开锁密码。(注意:尽量降低程序的时间复杂度)

输入格式

输入文件中包含两个字符串 XXYY。当中两字符串非 0011。序列长度均小于 99999999

输出格式

XXYY 的最长公共子序列长度。

01010101010 00000011111
6
01011 010010101111111111
5