fzu 2172 辣鸡题 胡乱DP的典型
来源:互联网 发布:淘宝的外贸原单 编辑:程序博客网 时间:2024/05/16 11:36
出题人dp一定学的菜如狗才能出出来这种辣鸡题
题目如下:
大师兄在取经途中迷上了ACM-ICPC,稍不留神,师傅就被妖怪抓走了。
大师兄并不着急去救师傅,在虐这道简单题:
有两个字符串A和B,每一次可以选择以下操作中的一种,只对字符串A进行操作,用最少的操作使得字符串A与字符串B相等:
在字符串A中插入一个字符;
在字符串A中删除一个字符;
将字符串A复制,得到字符串A的一个拷贝C,将字符串C接在字符串A后面。
每组输入数据包含两行,第一个一个字符串A,第二行一个字符串B。输入字符串最大长度为10。
如果最少操作次数大于15,则输出”more than 15 operations.”。
对每组输入数据,输出最少的操作次数,使得字符串A与字符串B相等。
aaaaaacaaaaa
24
写这道题的时候感觉好麻烦啊,认为得双向搜索什么的,然后又估了一下复杂度放弃了,下去搜题解,一看dp心想。雾草,大佬啊。
在此发一段奇妙dp思路截图
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长度
辣鸡,我就拿他的思路测了个abc与abcdabc,结果答案是个4,这好像很明显是2吧(abc先翻倍,然后中间加个d),然后随便翻了一下,几乎所有的博客都是这么写的......雾草。都没人测一下这种数据吗?.....就这还过了!!!这出题的肯定dp一塌糊涂非要强行装一波逼导致的。
‘
各位dalao若是在看这个题的解法千万别真以为这就是dp了.....
不信来测两组数据
abc
abcdabc
abc
dabcdabc
- fzu 2172 辣鸡题 胡乱DP的典型
- FZU-2172 DP
- 一些胡乱的想法
- 一道典型的DP题
- 胡乱的什么都有
- 第一次胡乱注册表的编写
- 胡乱写的webservice client
- XMU-1028(典型的背包问题(dp))
- fzu 2109(数位dp)
- FZU 2098 DP
- FZU 2101 DP
- fzu 1896 数位DP
- fzu 2113 数位dp
- FZU 2157 树形DP
- 【FZU 2177】 ytaaa (dp)
- 胡乱设置users的权限的结果
- 胡乱想到的一段C++伪码
- 国内外的php框架(胡乱整理)
- Uva.133 The Dole Queue
- SSL 2290——潜水员
- equals方法实现
- FOJ 2172 (DP+水数据+水题解 )
- Android中三种方法监听按钮点击事件
- fzu 2172 辣鸡题 胡乱DP的典型
- 一个创业者的心里话
- 函数指针
- JEECG 版本更新日志
- 克隆二叉树
- 【disconf】环境搭建
- HashMap与HashTable
- 菱形内的计数
- 第二届蓝桥杯 中奖计算