HDU 3831 DICS
题意:
通过题中给出的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相关推荐
- HDU 3831 DICS 递推dp
题意: 给定2个字符串,对上面的字符串进行修改使得其变成下面的字符串 有4种操作: 1.删除一个字符 2.插入一个字符 3.修改一个字符 4.把任意位置开始 [i, strlen] 修改为相同的字符 ...
- HDU 5643 King's Game 打表
King's Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5643 Description In order to remember hi ...
- HDU——1106排序(istringstream的使用、STLvector练习)
排序 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- hdu 5438 Ponds 拓扑排序
Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...
- HDU 1248 寒冰王座(全然背包:入门题)
HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...
- hdu 1312 Red and Black 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 第二条深搜,题目并不难,但是做了我好久好久,由于一个细节,让我赌上了一个晚上的时间. 题目大意: ...
- HDU 1429 胜利大逃亡(续) (BFS+位压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) ...
- hdu 1272 小希的迷宫
Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该 ...
- HDOJ 1157 HDU 1157 Who's in the Middle ACM 1157 IN HDU
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1157 题目描述: ...
最新文章
- ADMT3.2域迁移之Server2003至Server2012系列(八)生成密钥文件及安装密码迁移工具...
- 来看看CDN网络安全防护的方案
- 网页性能优化04-函数节流
- javascript设计模式--javascript的数据类型
- 记录一次,事务遇到消息发送,疏忽给自己挖坑
- 训练日志 2019.3.10
- Docker实践(六)部署redis
- sql server 2005管理员手册_执行一条sql语句都经历了什么?
- RTOS原理与实现05:事件控制块实现
- 好想学python机器人_拥有自动学习的Python机器人-ChatterBot
- JVM内存模型及垃圾回收算法
- Delphi7--循环结构语句
- Mac install ninja_玩游戏出现机器码或被封,用修改网卡mac物理地址的方法试一试...
- 疯狂java讲义第6版_疯狂java讲义第6版
- php计算跨月请假天数,计算请假天数JavaScript方法
- 压力测试软件 loadr,初学abench压力测试 - 玄大冰 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
- GitHub添加SSH key
- Java网络编程 获取本地主机名称和地址
- PacketTracer Physical view wireless single problem
- POJ 4113:北京地铁票价-BeiJing Subway