博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【动态规划】编辑距离
阅读量:5751 次
发布时间:2019-06-18

本文共 978 字,大约阅读时间需要 3 分钟。

自己动手敲的第一道二维DP题目(尽管偷偷翻了一下算法书)心情很美丽

思路


设dp[i][j]表示X[i]与Y[j]的编辑距离.

那么,可以进行三种操作:

插入x[i](等同于删除y[j]),那么dp[i][j]就等于dp[i-1][j]+1.
插入x[i](等同于删除y[j]),那么dp[i][j]就等于dp[i-1][j]+1.
将x[i]替换成y.

运用贪心,得到状态转移方程为:

dp[i][j]=min{dp[i-1][j]+1,dp[i-1][j]+1,dp[i-1][j-1]+(x[i]!=y[j])}

剩下的就是混代码了,不再赘述。

Code


#include
#include
using namespace std;string A,B;int dp[2001][2001];int min(int a,int b,int c){ if(a<=b&&a<=c) return a; if(b<=a&&b<=c) return b; if(c<=a&&c<=b) return c;}int main(){ //freopen("testdata.in","r",stdin); cin>>A>>B; for(int i=1;i<=A.size();i++) { dp[i][0]=i; } for(int j=1;j<=B.size();j++) { dp[0][j]=j; } for(int i=1;i<=A.size();i++) { for(int j=1;j<=B.size();j++) { dp[i][j]=min(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+(A[i-1]!=B[j-1])); } } /* 生成DP表格以便调试 cout<<" "<
<

转载于:https://www.cnblogs.com/gongdakai/p/11031533.html

你可能感兴趣的文章
看linux书籍做的一些重要笔记(2011.07.03更新)
查看>>
Exchange server 2010系列教程之一 安装Exchange 2010准备条件
查看>>
POI 生成 xls 文件使用总结(快速入门)
查看>>
CString、Char* ,char [20]、wchar_t、unsigned short转化
查看>>
从案例学RxAndroid开发(上)
查看>>
debian 下安装megacli
查看>>
我写的第一个shell脚本(2009-06-08)
查看>>
ubutun 中 Eclipse中 快捷键 Alt + / 不能使用的问题
查看>>
Redis学习手册(内存优化)
查看>>
浅尝TensorFlow on Kubernetes
查看>>
wnmp-3.1.0安装cakephp启动失败处理
查看>>
springboot系列十 Spring-Data-Redis
查看>>
Confluence 6 注册外部小工具
查看>>
excel进行矩阵计算
查看>>
基于Android平台的动态生成控件和动态改变控件位置的方法
查看>>
Java集合(二) Map 架构
查看>>
linux 死机分析
查看>>
BOM
查看>>
LeetCode:Nim Game - 尼姆博弈
查看>>
Python装饰器高级版—Python类内定义装饰器并传递self参数
查看>>