题意: 给两个字符串,可以增、删、改,问使这两个串变为相同的最小操作数。

解法:(下面2种的代码主要区别在初始化和,而状态转移方程大家可挑自己更容易理解的方法打)

1.f[i][j]表示a串前i个和b串前j个完成匹配的最小操作数。

2.f[i][j]表示a串前i-1个和b串前j-1个完成匹配的最小操作数。

  1. 1 #include<cstdio>
  2. 2 #include<cstdlib>
  3. 3 #include<cstring>
  4. 4 #include<iostream>
  5. 5 using namespace std;
  6. 6 #define N 1010
  7. 7
  8. 8 char a[1010],b[1010];
  9. 9 int f[1010][1010];
  10. 10
  11. 11 int mmin(int x,int y)
  12. 12 { return x<y?x:y; }
  13. 13 int main()
  14. 14 {
  15. 15 //freopen("a.in","r",stdin);
  16. 16 int T;
  17. 17 scanf("%d",&T);
  18. 18 f[0][0]=0;
  19. 19 for (int i=1;i<=N;i++)
  20. 20 f[i][0]=i, f[0][i]=i;
  21. 21 while (T--)
  22. 22 {
  23. 23 scanf("%s%s",a+1,b+1);
  24. 24 int la=strlen(a+1),lb=strlen(b+1);
  25. 25 for (int i=1;i<=la;i++)
  26. 26 for (int j=1;j<=lb;j++)
  27. 27 {
  28. 28 f[i][j]=mmin(f[i][j-1]+1,f[i-1][j]+1);//add del
  29. 29 if (a[i]==b[j]) f[i][j]=mmin(f[i][j],f[i-1][j-1]);
  30. 30 else f[i][j]=mmin(f[i][j],f[i-1][j-1]+1);//change
  31. 31 }
  32. 32 printf("%d\n",f[la][lb]);
  33. 33 }
  34. 34 return 0;
  35. 35 }

1

  1. 1 #include<cstdio>
  2. 2 #include<cstdlib>
  3. 3 #include<cstring>
  4. 4 #include<iostream>
  5. 5 using namespace std;
  6. 6
  7. 7 const int L=1010;
  8. 8 char s[L],ss[L];
  9. 9 int f[L][L];
  10. 10 void upd(int &x,int y) {x=x<y?x:y;}
  11. 11
  12. 12 int main()
  13. 13 {
  14. 14 int n;
  15. 15 scanf("%d",&n);
  16. 16 while (n--)
  17. 17 {
  18. 18 scanf("%s%s",s+1,ss+1);
  19. 19 int l=strlen(s+1),ll=strlen(ss+1);
  20. 20 memset(f,63,sizeof(f));
  21. 21 f[1][1]=0;
  22. 22 for (int i=1;i<=l+1;i++)
  23. 23 for (int j=1;j<=ll+1;j++)
  24. 24 {
  25. 25 if (f[i][j]>100010) continue;
  26. 26 upd(f[i+1][j],f[i][j]+1),upd(f[i][j+1],f[i][j]+1);
  27. 27 if (s[i]==ss[j]) upd(f[i+1][j+1],f[i][j]);
  28. 28 else upd(f[i+1][j+1],f[i][j]+1);
  29. 29 int x=1;
  30. 30 }
  31. 31 printf("%d\n",f[l+1][ll+1]);
  32. 32 }
  33. 33 return 0;
  34. 34 }

2

【noi 2.6_2988】计算字符串距离(DP)的更多相关文章

  1. Stanford NLP 课程笔记之计算字符串距离

    在自然语言处理任务中,有时候需要计算两个字符串之间的相似度,也可以称作是两者之间的距离,用最小编辑距离表示. 最小编辑距离用{Insertion,Deletion,Substitution}这三种操作 ...

  2. openjudge-NOI 2.6-2988 计算字符串距离

    题目链接:http://noi.openjudge.cn/ch0206/2988/ 题解: 首先,题目有误,少了一个添加操作 和求解LCS之类的思路类似 f[i][j]表示a序列中1..i的部分和b序 ...

  3. php实现 计算字符串的距离

    php实现 计算字符串的距离 一.总结 一句话总结:解决dp问题最好的方法是什么:分析出状态后 实例+画表. 1.解决dp问题最好的方法是什么? 分析出状态后 实例+画表 2.画图的好处? 画出来表之 ...

  4. 字符串距离 简单DP

    字符串距离 时间限制: 1 Sec  内存限制: 128 MB 题目描述 设有字符串 X,我们称在 X 的头尾及中间插入任意多个空格后构成的新字符串为 X 的扩展串,如字符串 X 为"abc ...

  5. Spark Java API 计算 Levenshtein 距离

    Spark Java API 计算 Levenshtein 距离 在上一篇文章中,完成了Spark开发环境的搭建,最终的目标是对用户昵称信息做聚类分析,找出违规的昵称.聚类分析需要一个距离,用来衡量两 ...

  6. Levenshtein字符串距离算法介绍

    Levenshtein字符串距离算法介绍 文/开发部 Dimmacro KMP完全匹配算法和 Levenshtein相似度匹配算法是模糊查找匹配字符串中最经典的算法,配合近期技术栏目关于算法的探讨,上 ...

  7. PHP中计算字符串相似度的函数代码

    similar_text — 计算两个字符串的相似度 int similar_text ( string $first , string $second [, float &$percent ...

  8. 【2014广州市选day1】JZOJ2020年9月12日提高B组T4 字符串距离

    [2014广州市选day1]JZOJ2020年9月12日提高B组T4 字符串距离 题目 Description 给出两个由小写字母组成的字符串 X 和Y ,我们需要算出两个字符串的距离,定义如下: 1 ...

  9. php计算字符串长度

    /** * 计算字符串的长度(非字节) * 先用正则将字符串分解为个体单元,然后再计算单元的个数即得出字符串的长度 * from wordpress * @param string $string * ...

随机推荐

  1. 我们NetCore下日志存储设计

    日志的分类 首先往大的来说,日志分2种 ①业务日志: 即业务系统需要查看的日志, 常见的比如谁什么时候修改了什么. ②参数日志: 一般是开发人员遇到问题的时候定位用的, 一般不需要再业务系统里展示. ...

  2. MongoDB导出导入功能

    导出脚本: mongo_export.sh !#/bin/bash mongoexport -h x.x.x.x  --port 27017 -d database -c collection  -q ...

  3. python sqlite3增加表字段

    给sqlite3表格增加新字段,要注意大小写,要不然不成功. 一开始这样写,不成功! 后面规范写,按大小写严格规范写! 成功了!现在查看新增加的字段commit: 仔细看,这下全部小写,括表名称.co ...

  4. SAP系统跨平台字符编码转换

    SAP系统在进行了夸平台的迁移,可能会遇到操作系统层文件编码不同,导致SAP系统无法识别或者乱码的问题.例如SAP系统从AIX平台迁移到linux平台,SAP应用服务器的编码会发生变化,从4102变化 ...

  5. 词嵌入之Word2Vec

    词嵌入要解决什么问题 在自然语言系统中,词被看作最为基本的单元,如何将词进行向量化表示是一个很基本的问题,词嵌入(word embedding)就是把词映射为低维实数域向量的技术. 下面先介绍几种词的 ...

  6. Python 日志打印之自定义logger handler

    日志打印之自定义logger handler By:授客 QQ:1033553122 #实践环境 WIN 10 Python 3.6.5 #实践代码 handler.py #!/usr/bin/env ...

  7. 离线安装docker-ce

    1.用一台可以连外网的虚拟机把docker-ce安装包下载下来,vim /tmp/docker-download.sh #!/bin/bash set -e mkdir -p /apps/docker ...

  8. 重磅:保姆级Java技术图谱发布!够学到元宵节了,赶紧收藏!

    最近因为参与社群交流的时间比较多,除了唠唠白酒的嗑之外,很大一部分时间都是看到群里问到一些关于Spring Boot和Spring Cloud应用过程中碰到的问题以及一些开发过程中的报错信息.在这些帮 ...

  9. What is :: (double colon) in Python when subscripting sequences?

    What is :: (double colon) in Python when subscripting sequences? 15 Extended Slices https://docs.pyt ...

  10. ASP.NET Core 5.0 MVC中的 Razor 页面 介绍

    Razor 是一个用于将基于服务器的代码嵌入到网页中的标记语法. Razor语法由 Razor 标记.c # 和 HTML 组成. 通常包含 Razor 的文件的扩展名 cshtml Razor 语法 ...