F - 巡了南山我巡北山

Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Description

  大师兄在取经途中迷上了ACM-ICPC,稍不留神,师傅就被妖怪抓走了。

  大师兄并不着急去救师傅,在虐这道简单题:

  有两个字符串A和B,每一次可以选择以下操作中的一种,只对字符串A进行操作,用最少的操作使得字符串A与字符串B相等:

在字符串A中插入一个字符;

在字符串A中删除一个字符;

将字符串A复制,得到字符串A的一个拷贝C,将字符串C接在字符串A后面。

Input

  每组输入数据包含两行,第一个一个字符串A,第二行一个字符串B。输入字符串最大长度为10。

如果最少操作次数大于15,则输出”more than 15 operations.”。

Output

  对每组输入数据,输出最少的操作次数,使得字符串A与字符串B相等。

Sample Input

a aaaa ac aaaaa

Sample Output

2 4
 
 
dp[i][j]代表长度为i的字符串变为长度为j的字符串所需的步数

dp[i][j] 可能由dp[i-1][j],dp[i][j-1],dp[i-1][j-1],dp[i/2][j],dp[i/2][j/2],dp[i][j/2] 推过来

dp[i-1][j]  a中前i-1个已经与b中前j个相同,那么需要把a中第i个字符删掉 所以dp[i][j]=dp[i-1][j]+1

dp[i][j-1]  a中前i个已经与b中前j-1个相同,那么需要在a的后面添加一个b中的第j个字符 dp[i][j]=dp[i][j-1]+1

dp[i-1][j-1]  这是要看a[i]以及b[j],如果这两个相同,显然dp[i][j]=dp[i-1][j-1],如果不同的话首先b不能变,只能把a的第i个删掉然后在a的后面添加一个b[j];这样dp[i][j]=dp[i-1][j-1]+2

dp[i/2][j]  无意义,应为规则中只能改变a串

dp[i/2][j/2] 同上

dp[i][j/2]  参考dp[i][j-1],现在我们需要在a串后边再添加j/2个字符,也就是要求b这个字符串只有在满足第0个到第j/2-1个与第j/2个到第j个完全相同,这种情况下才能对a进行复制操作
这个时候 dp[i][j]=dp[i][j/2]+1

公式 dp[i][j]=min(dp[i-1][j]+1,dp[i][j-1]+1,(dp[i-1][j-1] or dp[i-1][j-1]+2),dp[i][j/2]+1(这项必须满足条件才能出现))

初始条件,当a串长度为0,变为b串所需步数为b串长度,同里

dp[0][n]=n dp[m][0]=m;0<=m<=a长度  0<=n<=b长度

 

fzu2172 字符串dp的更多相关文章

  1. 【BZOJ 2121】 (字符串DP,区间DP)

    2121: 字符串游戏 Description BX正在进行一个字符串游戏,他手上有一个字符串L,以及其他一些字符串的集合S,然后他可以进行以下操作:对于一个在集合S中的字符串p,如果p在L中出现,B ...

  2. AtCoder Regular Contest 081 E - Don't Be a Subsequence(字符串DP)

    引用自:onion_cyc 字符串DP一直不是强项...以后没思路的题就想DP和网络流23333333 f[i]表示从i开始的后缀非子序列的最短长度  pos[i][j]表示从i开始的j字符最早出现位 ...

  3. NOIP2015Day2T2子串(字符串dp)

    又被“if(a=b)”坑了QAQ...写C++还是得开Warning,这么久了pascal还没改过来咋回事啊QWQ 题目大意就不说了OWO 网上的题解都不怎么看得懂啊...好像写得都很乱?还是我太sb ...

  4. Codeforces 1150D(字符串dp)

    反思 三维的dp压根没看出来,看题解以后思路又很直观,找几道字符串dp练练才行 序列自动机和优化一维略 /* __ __ * ____| |_____| |____ * | | * | __ | * ...

  5. 51nod 1092 回文字符串 (dp)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1092 这个题是poj-3280的简化版,这里只可以增加字符,设 dp[i ...

  6. Codeforces Round #358 (Div. 2) D. Alyona and Strings 字符串dp

    题目链接: 题目 D. Alyona and Strings time limit per test2 seconds memory limit per test256 megabytes input ...

  7. NYOJ37-回文字符串(dp)

    37-回文字符串 内存限制:64MB 时间限制:3000ms 特判: No通过数:88 提交数:177 难度:4 题目描述: 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如& ...

  8. 牛客练习赛37-筱玛的字符串-DP递推

    筱玛的字符串 思路 :dp [ i ] [ j ] [ 3 ] 分别代表到第 i 位时 左括号比右括号多 j ,后面有三个状态 分别表示当前位置 S3的字符 是正在反转的,还是 反转完成的,还是没有反 ...

  9. Maximum Questions CodeForces - 900E (字符串,dp)

    大意:给定长$n$的字符串$s$, 只含'a','b','?', '?'可以替换为任意字符, 在给定长$t$的字符串, "ababab...", 求替换尽量少的'?', 使得$s$ ...

随机推荐

  1. 注释(Annotation)

    J2SE 5.0提供了很多新的特征.其中一个很重要的特征就是对元数据(Metadata)的支持.在J2SE 5.0中,这种元数据称为注释(Annotation).通过使用注释,程序开发人员可以在不改变 ...

  2. PHP页面跳转

    PHP页面跳转一.header()函数 header()函数是PHP中进行页面跳转的一种十分简单的方法.header()函数的主要功能是将HTTP协议标头(header)输出到浏览器. header( ...

  3. EF事务

    var db = this.UnitOfWork as CodeFirstDbContext; using (var tan = db.Database.BeginTransaction()) { t ...

  4. Lua 之os库

    标准os库 os.rename(oldname, newname) 文件重命名: os.remove(filename) 删除一个文件 os.execute(cmd) os.execute可运行一条系 ...

  5. Java并发编程核心方法与框架-Future和Callable的使用

    Callable接口与Runnable接口对比的主要优点是Callable接口可以通过Future获取返回值.但是Future接口调用get()方法取得结果时是阻塞的,如果调用Future对象的get ...

  6. Oracle的DBMS_OUTPUT.PUT_LINE用法及脚本批处理方法

    打印至控制台(无显示): BEGIN DBMS_OUTPUT.PUT_LINE('Hey look, ma!'); END; / 打印至控制台(有显示): SET SERVEROUTPUT ON BE ...

  7. MySQL关键字(保留字)列表

    在使用MySQL的时候,一般尽量避免用关键字作为表名,如使用关键字做表名,需要按标准写法给SQL语句加[](或是“)区分字段名和表名. 下面列出MySQL所有关键字,希望给使用MySQL的朋友提供一些 ...

  8. JaxWsProxyFactoryBean 与 JaxWsDynamicClientFactory

    1. JaxWsProxyFactoryBean    简介:调用方式采用了和RMI类似的机制,即客户端直接调用服务器端提供的服务接口(interface),CXF通过运行时代理生成远程服务的代理对象 ...

  9. 详解FindBugs的各项检测器 .

    FindBugs是一个静态分析工具,在程序不需运行的情况下,分析class文件,将字节码与一组缺陷模式进行对比,试图寻找真正的缺陷或者潜在的性能问题.本文档主要详细说明FindBugs 2.0.3版本 ...

  10. Linux系统改变ls文件和文件夹颜色方法

    本人之前就针对蓝色文件夹的颜色  我是这样修改的:    cp /etc/DIR_COLORS   ~/.dir_colors vim   ~/.dir_colors   , 将DIR 01;33   ...