【noi 2.6_2988】计算字符串距离(DP)
题意: 给两个字符串,可以增、删、改,问使这两个串变为相同的最小操作数。
解法:(下面2种的代码主要区别在初始化和,而状态转移方程大家可挑自己更容易理解的方法打)
1.f[i][j]表示a串前i个和b串前j个完成匹配的最小操作数。
2.f[i][j]表示a串前i-1个和b串前j-1个完成匹配的最小操作数。
1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 using namespace std;
6 #define N 1010
7
8 char a[1010],b[1010];
9 int f[1010][1010];
10
11 int mmin(int x,int y)
12 { return x<y?x:y; }
13 int main()
14 {
15 //freopen("a.in","r",stdin);
16 int T;
17 scanf("%d",&T);
18 f[0][0]=0;
19 for (int i=1;i<=N;i++)
20 f[i][0]=i, f[0][i]=i;
21 while (T--)
22 {
23 scanf("%s%s",a+1,b+1);
24 int la=strlen(a+1),lb=strlen(b+1);
25 for (int i=1;i<=la;i++)
26 for (int j=1;j<=lb;j++)
27 {
28 f[i][j]=mmin(f[i][j-1]+1,f[i-1][j]+1);//add del
29 if (a[i]==b[j]) f[i][j]=mmin(f[i][j],f[i-1][j-1]);
30 else f[i][j]=mmin(f[i][j],f[i-1][j-1]+1);//change
31 }
32 printf("%d\n",f[la][lb]);
33 }
34 return 0;
35 }
1
1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 using namespace std;
6
7 const int L=1010;
8 char s[L],ss[L];
9 int f[L][L];
10 void upd(int &x,int y) {x=x<y?x:y;}
11
12 int main()
13 {
14 int n;
15 scanf("%d",&n);
16 while (n--)
17 {
18 scanf("%s%s",s+1,ss+1);
19 int l=strlen(s+1),ll=strlen(ss+1);
20 memset(f,63,sizeof(f));
21 f[1][1]=0;
22 for (int i=1;i<=l+1;i++)
23 for (int j=1;j<=ll+1;j++)
24 {
25 if (f[i][j]>100010) continue;
26 upd(f[i+1][j],f[i][j]+1),upd(f[i][j+1],f[i][j]+1);
27 if (s[i]==ss[j]) upd(f[i+1][j+1],f[i][j]);
28 else upd(f[i+1][j+1],f[i][j]+1);
29 int x=1;
30 }
31 printf("%d\n",f[l+1][ll+1]);
32 }
33 return 0;
34 }
2
【noi 2.6_2988】计算字符串距离(DP)的更多相关文章
- Stanford NLP 课程笔记之计算字符串距离
在自然语言处理任务中,有时候需要计算两个字符串之间的相似度,也可以称作是两者之间的距离,用最小编辑距离表示. 最小编辑距离用{Insertion,Deletion,Substitution}这三种操作 ...
- openjudge-NOI 2.6-2988 计算字符串距离
题目链接:http://noi.openjudge.cn/ch0206/2988/ 题解: 首先,题目有误,少了一个添加操作 和求解LCS之类的思路类似 f[i][j]表示a序列中1..i的部分和b序 ...
- php实现 计算字符串的距离
php实现 计算字符串的距离 一.总结 一句话总结:解决dp问题最好的方法是什么:分析出状态后 实例+画表. 1.解决dp问题最好的方法是什么? 分析出状态后 实例+画表 2.画图的好处? 画出来表之 ...
- 字符串距离 简单DP
字符串距离 时间限制: 1 Sec 内存限制: 128 MB 题目描述 设有字符串 X,我们称在 X 的头尾及中间插入任意多个空格后构成的新字符串为 X 的扩展串,如字符串 X 为"abc ...
- Spark Java API 计算 Levenshtein 距离
Spark Java API 计算 Levenshtein 距离 在上一篇文章中,完成了Spark开发环境的搭建,最终的目标是对用户昵称信息做聚类分析,找出违规的昵称.聚类分析需要一个距离,用来衡量两 ...
- Levenshtein字符串距离算法介绍
Levenshtein字符串距离算法介绍 文/开发部 Dimmacro KMP完全匹配算法和 Levenshtein相似度匹配算法是模糊查找匹配字符串中最经典的算法,配合近期技术栏目关于算法的探讨,上 ...
- PHP中计算字符串相似度的函数代码
similar_text — 计算两个字符串的相似度 int similar_text ( string $first , string $second [, float &$percent ...
- 【2014广州市选day1】JZOJ2020年9月12日提高B组T4 字符串距离
[2014广州市选day1]JZOJ2020年9月12日提高B组T4 字符串距离 题目 Description 给出两个由小写字母组成的字符串 X 和Y ,我们需要算出两个字符串的距离,定义如下: 1 ...
- php计算字符串长度
/** * 计算字符串的长度(非字节) * 先用正则将字符串分解为个体单元,然后再计算单元的个数即得出字符串的长度 * from wordpress * @param string $string * ...
随机推荐
- MyBatis初级实战之一:Spring Boot集成
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- wpf 在不同DPI下如何在DrawingVisual中画出清晰的图形
环境Win10 VS2017 .Net Framework4.7.1 本文仅讨论在DrawingVisual中进行的画图. WPF单位,系统DPI,显示器DPI三者的定义及关系 WPF单位:一 ...
- 四:WEB源码扩展
前言:WEB源码在安全测试中是非常重要的信息来源,可以用来进行代码审计漏洞也可以用来做信息突破口,其中WEB源码有很多技术需要简明分析,获取某ASP源码后就可以采用默认数据库下载为突破,获取某其他脚本 ...
- 彻底搞懂MySQL为什么要使用B+树索引
目录 MySQL的存储结构 表存储结构 B+树索引结构 B+树页节点结构 为什么要用B+树索引 二叉树 多叉树 B树 B+树 搞懂这个问题之前,我们首先来看一下,MySQL表的存储结构 MySQL的存 ...
- 【Linux】rsync 守护进程的配置
环境 centos7.2 1.首先查看是否安装rsync的相关包 rpm -qa | grep rsync rsync-3.1.2-4.el7.x86_64 如果没安装就yum install rsy ...
- 【Linux】salt的cmd.script命令介绍
salt是一个很棒的自动化运维工具之一,常用的有cmd.run,今天介绍的是cmd.script 其实一眼就能看出这个命令是执行脚本的命令 具体操作如下: 1.将/etc/salt/master中的 ...
- webpack知识点整理
作用域 es6里模块化的写法 会存在的问题,变量.方法名字雷同,外部文件调用的时候出现问题 如 a.js里 var a='susan' b.js里 var a='jack' 问题解决方案,添加包裹 a ...
- K8s遇到问题解决思路
问题排查一 从describe去查找相应的deploy/pod/rs/svc [root@k8s-master ~]# kubectl describe po/nginx-f95d765f9-8b6b ...
- linux下的命令自动补齐增强
linux 7 下 安装 bash-completion 可以实现命令的参数的自动补齐
- 运用 pyinstaller 打包的python exe文件运行 去掉命令行窗口及其他参数汇总
运行exe文件的时候,会弹出一个dos命令窗口,这个窗口可以看到一些打印信息,如果想只运行tkinter 页面,去掉dos窗口需要在打包的时候 加上 -w 参数 pyinstaller -F XX.p ...