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

解法:(下面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)的更多相关文章

  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. zabbix_server上的问题

    不要写成127.0.0.1,要不然一直包zabbix agent没有启动.

  2. 【Java】Java关键字、含义

    Java关键字 来自 Java 核心技术卷I 基础知识(原书第10 版)/( 美)凯S 霍斯特曼(Cay S . Horstmann )著: 周立新等译一北京:机械工业出版社, 2016 . 8 Ja ...

  3. show engine innodb status

    TRANSACTIONS------------Trx id counter 2003909(当前事务号)Purge done for trx's n:o < 2003905 (清理线程完成到了 ...

  4. a[i][j] 和 a[j][i] 有什么区别?

    本文以一个简单的程序开头--数组赋值: int LEN = 10000;int[][] arr = new int[LEN][LEN]; for (int i = 0; i < LEN; i++ ...

  5. ctfhub技能树—密码口令—默认口令

    打开靶机 查看页面内容 根据题目提示,去搜索北京亿中邮信息技术有限公司邮件网关的默认口令 尝试登录 成功拿到flag

  6. mysql查看修改参数

    1.查看参数 show variables like '%timeout%'; 2.修改参数 会话级别修改: set session innodb_lock_wait_timeout=50; 对当前会 ...

  7. bootstrap弹出层嵌套弹出层后文本框不能获得焦点输入

    如图上 我从页面打开一个bootstrap弹出层 然后又在 bootstrap弹出层的基础上打开一个layui的弹出层  打开后发现文本域获取不到焦点不能输入内容 而该弹出层显示的层级体现出来了 按钮 ...

  8. dubbo快速入门demo

    参考文章 https://blog.csdn.net/abcwanglinyong/article/details/81906027 该demo包含三个项目,分别是: 服务提供端项目:provider ...

  9. 干电池升压5V,功耗10uA

    PW5100干电池升压5V芯片 输出电容: 所以为了减小输出的纹波,需要比较大的输出电容值.但是输出电容过大,就会使得系统的 反应时间过慢,成本也会增加.所以建议使用一个 22uF 的电容,或者两个 ...

  10. Centos 安装postgreSQL9.4.3

    rpm -ivh http://download.postgresql.org/pub/repos/yum/9.4/redhat/rhel-7.2-x86_64/pgdg-centos94-9.4-3 ...