题意:

通过题中给出的4种操作  用最少的次数  从a串变换到b串

思路:

由于操作只有这4种  所以我们可以确定从头到位去匹配a和b一定是正确的

那么状态数一共有多少呢  一共有length[a]*length[b]*(1+num(a~z)+num(A~Z))  状态不多  可以用dp解决

上述计算状态可以表示为dp[i][j][k]  即a串匹配到i同时b串匹配到j  k表示修改后缀操作修改成的字符

那么只需要打表出所有的dp  同时利用dp+(lena-i)+(lenb-j)更新ans即可

代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<cstdlib>
#include<ctime>
#include<cmath>
using namespace std;
typedef unsigned long long LL;
#define N 505
#define M 53
#define inf 100000000int ans;
int dp[N][N][M];
char f[N], g[N];int change(char u) {if (u >= 'A' && u <= 'Z')return u - 'A' + 1;if (u >= 'a' && u <= 'z')return u - 'a' + 27;return 0;
}int main() {int i, j, k, ans, lf, lg;while (~scanf("%s", f)) {if (!strcmp(f, "#"))break;scanf("%s", g);lf = strlen(f);lg = strlen(g);for (i = 0; i <= lf; i++) {for (j = 0; j <= lg; j++) {for (k = 0; k < M; k++)dp[i][j][k] = inf;}}ans = inf;dp[0][0][0] = 0;for (i = 0; i <= lf; i++) {for (j = 0; j <= lg; j++) {for (k = 0; k < M; k++) {if (dp[i][j][k] == inf)continue;ans = min(ans, dp[i][j][k] + lf - i + lg - j);if (i == lf || j == lg)continue;if ((!k && f[i] == g[j]) || (k && k == change(g[j]))) {//samedp[i + 1][j + 1][k] = min(dp[i + 1][j + 1][k],dp[i][j][k]);} else {//deletedp[i + 1][j][k] = min(dp[i + 1][j][k], dp[i][j][k] + 1);//insertdp[i][j + 1][k] = min(dp[i][j + 1][k], dp[i][j][k] + 1);//changedp[i + 1][j + 1][k] = min(dp[i + 1][j + 1][k],dp[i][j][k] + 1);//Suffix changedp[i + 1][j + 1][change(g[j])] = min(dp[i + 1][j + 1][change(g[j])],dp[i][j][k] + 1);}}}}printf("%d\n", ans);}return 0;
}

HDU 3831 DICS相关推荐

  1. HDU 3831 DICS 递推dp

    题意: 给定2个字符串,对上面的字符串进行修改使得其变成下面的字符串 有4种操作: 1.删除一个字符 2.插入一个字符 3.修改一个字符 4.把任意位置开始 [i, strlen] 修改为相同的字符 ...

  2. HDU 5643 King's Game 打表

    King's Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5643 Description In order to remember hi ...

  3. HDU——1106排序(istringstream的使用、STLvector练习)

    排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  4. hdu 5438 Ponds 拓扑排序

    Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...

  5. HDU 1248 寒冰王座(全然背包:入门题)

    HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...

  6. hdu 1312 Red and Black 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 第二条深搜,题目并不难,但是做了我好久好久,由于一个细节,让我赌上了一个晚上的时间. 题目大意: ...

  7. HDU 1429 胜利大逃亡(续) (BFS+位压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)  ...

  8. hdu 1272 小希的迷宫

    Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该 ...

  9. HDOJ 1157 HDU 1157 Who's in the Middle ACM 1157 IN HDU

    MiYu原创, 转帖请注明 : 转载自 ______________白白の屋   题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1157 题目描述: ...

最新文章

  1. ADMT3.2域迁移之Server2003至Server2012系列(八)生成密钥文件及安装密码迁移工具...
  2. 来看看CDN网络安全防护的方案
  3. 网页性能优化04-函数节流
  4. javascript设计模式--javascript的数据类型
  5. 记录一次,事务遇到消息发送,疏忽给自己挖坑
  6. 训练日志 2019.3.10
  7. Docker实践(六)部署redis
  8. sql server 2005管理员手册_执行一条sql语句都经历了什么?
  9. RTOS原理与实现05:事件控制块实现
  10. 好想学python机器人_拥有自动学习的Python机器人-ChatterBot
  11. JVM内存模型及垃圾回收算法
  12. Delphi7--循环结构语句
  13. Mac install ninja_玩游戏出现机器码或被封,用修改网卡mac物理地址的方法试一试...
  14. 疯狂java讲义第6版_疯狂java讲义第6版
  15. php计算跨月请假天数,计算请假天数JavaScript方法
  16. 压力测试软件 loadr,初学abench压力测试 - 玄大冰 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  17. GitHub添加SSH key
  18. Java网络编程 获取本地主机名称和地址
  19. PacketTracer Physical view wireless single problem
  20. POJ 4113:北京地铁票价-BeiJing Subway

热门文章

  1. 学 Python 必看的书单汇总
  2. 《不可思议的年代》读书笔记
  3. Finereport 9.0升级到10.0工具下载[9-10升级工具]
  4. 2021年茶艺师(中级)考试报名及茶艺师(中级)模拟考试题
  5. 假如生活欺骗了你--普希金
  6. 以太坊合并背景下的四种投资策略
  7. Windows远程桌面连接不上虚拟机
  8. 百度图片下载器2.0
  9. 408计算机组成原理大题方向,2019考研408计算机组成原理选择题及答案(36)
  10. 电子学会青少年等级考试C语言(二级)