【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 * ...
随机推荐
- 我们NetCore下日志存储设计
日志的分类 首先往大的来说,日志分2种 ①业务日志: 即业务系统需要查看的日志, 常见的比如谁什么时候修改了什么. ②参数日志: 一般是开发人员遇到问题的时候定位用的, 一般不需要再业务系统里展示. ...
- MongoDB导出导入功能
导出脚本: mongo_export.sh !#/bin/bash mongoexport -h x.x.x.x --port 27017 -d database -c collection -q ...
- python sqlite3增加表字段
给sqlite3表格增加新字段,要注意大小写,要不然不成功. 一开始这样写,不成功! 后面规范写,按大小写严格规范写! 成功了!现在查看新增加的字段commit: 仔细看,这下全部小写,括表名称.co ...
- SAP系统跨平台字符编码转换
SAP系统在进行了夸平台的迁移,可能会遇到操作系统层文件编码不同,导致SAP系统无法识别或者乱码的问题.例如SAP系统从AIX平台迁移到linux平台,SAP应用服务器的编码会发生变化,从4102变化 ...
- 词嵌入之Word2Vec
词嵌入要解决什么问题 在自然语言系统中,词被看作最为基本的单元,如何将词进行向量化表示是一个很基本的问题,词嵌入(word embedding)就是把词映射为低维实数域向量的技术. 下面先介绍几种词的 ...
- Python 日志打印之自定义logger handler
日志打印之自定义logger handler By:授客 QQ:1033553122 #实践环境 WIN 10 Python 3.6.5 #实践代码 handler.py #!/usr/bin/env ...
- 离线安装docker-ce
1.用一台可以连外网的虚拟机把docker-ce安装包下载下来,vim /tmp/docker-download.sh #!/bin/bash set -e mkdir -p /apps/docker ...
- 重磅:保姆级Java技术图谱发布!够学到元宵节了,赶紧收藏!
最近因为参与社群交流的时间比较多,除了唠唠白酒的嗑之外,很大一部分时间都是看到群里问到一些关于Spring Boot和Spring Cloud应用过程中碰到的问题以及一些开发过程中的报错信息.在这些帮 ...
- What is :: (double colon) in Python when subscripting sequences?
What is :: (double colon) in Python when subscripting sequences? 15 Extended Slices https://docs.pyt ...
- ASP.NET Core 5.0 MVC中的 Razor 页面 介绍
Razor 是一个用于将基于服务器的代码嵌入到网页中的标记语法. Razor语法由 Razor 标记.c # 和 HTML 组成. 通常包含 Razor 的文件的扩展名 cshtml Razor 语法 ...