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
Sample Output
2 4
分析: 提前说明,此题不仅后台数据水,网上题解也是巨错。希望看到的人不要被这道题骗了。
首先是网上题解 是错误的,最后一个操作是不可能由一个DP【i】【j/2】 推出来的。
不信的话可以试试这组数据:
abc
abcdabc
按照题意我的理解 最小操作次数是2次,首先abc->(翻倍)abcabc->(插入)abcdabc
而网上给的标程答案是 4,而且后台数据没有more than 15 operations.这种情况。
所以根据我对此题的理解这道题应该是一个记忆化搜索+状态压缩。 双向 bfs 以字符串A和字符串B为初始状态开始搜索,然后搜索所有的下一步操作可到达的状态,并记录。
搜索停止条件:1,在总步数>15的条件下没有成功搜到一个公共状态。2,在总步数15步内 搜到一个公共状态。
希望此题能修改一下,不要被网上所谓正确代码误解。
但是作为DP练思维还是可以的。