51Nod 编辑距离 DP+滚动数组
2016-07-18 17:41
381 查看
51Nod 编辑距离 DP
题目链接:51Nod编辑距离思路:令dp[i][j] 表示 A字符串前i个字符,与B字符串的前j个字符的最小编辑距离。
那么有,
i = 0 && j == 0 时,
dp[i][j] = 0;
i = 0 && 0 < j < lenB时,
dp[i][j] = j;
j = 0 && 0 < i < lenA 时,
dp[i][j] = i;
0 < i < lenA && 0 < j < lenB时
if (A[i] == B[j])
dp[i][j] = min(dp[i - 1][j - 1], min(dp[i - 1][j], dp[i][j - 1]) + 1);
else
dp[i][j] = min(dp[i - 1][j - 1], min(dp[i - 1][j], dp[i][j - 1])) + 1;
然后,第i行的结果只与i-1,和i行的结果有关,可以采用一个dp[2][MAXLENB]滚动数组来优化空间。
#include <cmath> #include <queue> #include <vector> #include <cstdio> #include <string> #include <cstring> #include <iomanip> #include <iostream> #include <algorithm> using namespace std; //#pragma comment(linker, "/STACK:1024000000,1024000000") #define FIN freopen("input.txt","r",stdin) #define FOUT freopen("output.txt","w",stdout) typedef __int64 LL; //typedef long long LL; typedef unsigned int uint; typedef pair<int, int> PII; typedef pair<LL, LL> PLL; const int INF = 0x3f3f3f3f; const double eps = 1e-6; const int MAXN = 1000 + 5; const int MAXM = 1000 + 5; char A[MAXN], B[MAXN]; int dp[2][MAXN]; int main() { #ifndef ONLINE_JUDGE FIN; #endif // ONLINE_JUDGE while (~scanf("%s %s", A, B)) { int lenA = strlen(A); int lenB = strlen(B); for (int i = 0; i <= lenA; i++) { for (int j = 0; j <= lenB; j++) { if (i == 0 && j == 0) dp[i & 1][j] = 0; else if (i == 0) dp[i & 1][j] = j; else if (j == 0) dp[i & 1][j] = i; else if (A[i - 1] == B[j - 1]) dp[i & 1][j] = min(dp[(i - 1) & 1][j - 1], min(dp[(i - 1) & 1][j], dp[i & 1][j - 1]) + 1); else dp[i & 1][j] = min(dp[(i - 1) & 1][j - 1], min(dp[(i - 1) & 1][j], dp[i & 1][j - 1])) + 1; } } printf("%d\n", dp[lenA & 1][lenB]); } return 0; }
相关文章推荐
- Android 6.0 Changes
- NYOJ216
- 设计模式---(设计原则)面向对象设计原则
- IO读文件 each_line foreach read readlines
- Bug系列------关于进程信号传递的competion
- 亚马逊FBA是什么?——跨海汇
- <转>Cocos2d-x下Lua调用自定义C++类和函数的最佳实践
- hadoop 开发调试环境
- SDL2.0与opengl的混合使用,绘图和纹理的加载。
- 数组指针和指针数组 原理 及 异同
- ROS学习之 cpp定时器
- a标签的4种状态
- [置顶] AndroidPdfView一行代码快速显示pdf,支持线上下载与显示
- Python 小甲鱼教程 乌龟吃鱼游戏
- 欢迎使用CSDN-markdown编辑器
- 在.NET使用Newtonsoft.Json转换,读取,写入json
- python正则表达式--基本用法和函数(简单实例)
- ExpandableListView(似listview中的item可展开)可展开的列表组件
- Eclipse常用快捷键
- hdoj 1205 吃糖果 <抽屉原理>