问题简述:

  输入两个序列x和y,分别执行下列三个步骤,将序列x转化为y

  (1)插入;(2)删除;(3)替换;

  要求输出最小操作数。

  原题链接:http://poj.org/problem?id=3356

解题思路:

  明显的动态规划题,输入两个字符串 a[0...m-1] , b[0...n]

  使用二维数组 dp[i,j] 记录 a[0...i] 和 b[0...j] 对应的最小操作数

  显然有以下递归方程:

  dp[i,0] = i

  dp[0,j] = j

  dp[i,j] = dp[i-1,j-1]     if a[i-1]==b[j-1]

  dp[i,j] = min(dp[i-1,j-1],dp[i-1,j],dp[i,j-1]) + 1    if a[i-1]!=b[j-1]

源代码

 /*
OJ: POJ
ID: 3013216109
TASK: 3356.AGTC
LANG: C++
NOTE: DP
*/
#include <cstdio> const int MAX=;
int m,n,i,j,k;
char a[MAX],b[MAX];
int dp[MAX][MAX],c[MAX]; int min(int x,int y,int z) {
if(x<+y&&x<=z)
return x;
if(y<=x&&y<=z)
return y;
if(z<=x&&z<=y)
return z;
} int main()
{
while(scanf("%d %s",&m,a)!=EOF) {
scanf("%d %s",&n,b);
for(i=;i<=m;i++)
dp[i][]=i;
for(j=;j<=n;j++)
dp[][j]=j;
k=;
for(i=;i<=m;i++) {
for(j=;j<=n;j++) {
if(a[i-]==b[j-])
dp[i][j]=dp[i-][j-];
else
dp[i][j]=min(dp[i-][j-],dp[i-][j],dp[i][j-])+;
}
}
printf("%d\n",dp[m][n]);
}
return ;
}

POJ 3356.AGTC的更多相关文章

  1. POJ 3356 AGTC(最小编辑距离)

    POJ 3356 AGTC(最小编辑距离) http://poj.org/problem?id=3356 题意: 给出两个字符串x 与 y,当中x的长度为n,y的长度为m,而且m>=n.然后y能 ...

  2. poj 3356 AGTC(线性dp)

    题目链接:http://poj.org/problem?id=3356 思路分析:题目为经典的编辑距离问题,其实质为动态规划问题: 编辑距离问题定义:给定一个字符串source,可以对其进行复制,替换 ...

  3. POJ 3356 AGTC(最长公共子)

    AGTC Description Let x and y be two strings over some finite alphabet A. We would like to transform  ...

  4. POJ 3356 AGTC(DP-最小编辑距离)

    Description Let x and y be two strings over some finite alphabet A. We would like to transform x int ...

  5. POJ 3356 AGTC(DP求字符串编辑距离)

    给出两个长度小于1000的字符串,有三种操作,插入一个字符,删除一个字符,替换一个字符. 问A变成B所需的最少操作数(即编辑距离) 考虑DP,可以用反证法证明依次从头到尾对A,B进行匹配是不会影响答案 ...

  6. POJ 3356(最短编辑距离问题)

    POJ - 3356 AGTC Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Desc ...

  7. POJ 3356 水LCS

    题目链接: http://poj.org/problem?id=3356 AGTC Time Limit: 1000MS   Memory Limit: 65536K Total Submission ...

  8. Poj 3356 ACGT(LCS 或 带备忘的递归)

    题意:把一个字符串通过增.删.改三种操作变成另外一个字符串,求最少的操作数. 分析: 可以用LCS求出最大公共子序列,再把两个串中更长的那一串中不是公共子序列的部分删除. 分析可知两个字符串的距离肯定 ...

  9. poj 3356

    Description Let x and y be two strings over some finite alphabet A. We would like to transform x int ...

随机推荐

  1. (转)iOS 开发,工程中混合使用 ARC 和非ARC

    [前提知识] ARC:Automatic Reference Counting,自动引用计数 在开发 iOS 3 以及之前的版本的项目时我们要自己负责使用引用计数来管理内存,比如要手动 retain. ...

  2. [置顶] hdu2815 扩展Baby step,Giant step入门

    题意:求满足a^x=b(mod n)的最小的整数x. 分析:很多地方写到n是素数的时候可以用Baby step,Giant step, 其实研究过Baby step,Giant step算法以后,你会 ...

  3. C# 类型的创建

    类 类是最普通的引用类型,最简单的声明如下所示: class YourNameClass { } 更复杂的类可以拥有以下这些选项: 置于关键字class前面的:属性(attributes)与class ...

  4. 新手求大神,有其他swit-case的思路写这个程序么?

    两个程序: switch-case与if-else if的区别相同点:可以实现多分支结构;不同点:switch:一般只能用于等值比较.(可以进行范围运算???---学会用switch计算范围出炉的思路 ...

  5. Apache Tomcat Not Showing in Eclipse Server Runtime Environments

    In my case I needed to install "JST Server Adapters". I am running Eclipse 3.6 Helios RCP ...

  6. 关于C语言中有string类型吗?

    一.问题来源 今天在VS2010平台上,尝试采用scanf() string word; scanf("%s",&word); 然后发现错误,输出采用 printf(&qu ...

  7. BZOJ 2726: [SDOI2012]任务安排( dp + cdq分治 )

    考虑每批任务对后面任务都有贡献, dp(i) = min( dp(j) + F(i) * (T(i) - T(j) + S) ) (i < j <= N)  F, T均为后缀和. 与j有关 ...

  8. jquery实现点击改变背景色,点击其他恢复原来背景色,被点击的改变背景色

    实现这个功能很简单,可是之前自己不怎么熟悉jquery,感觉各种乱写.现在终于整理好了思路. html: <div class="managementPanel"> & ...

  9. navigator.geolocation例子

    navigator.geolocation例子 <html> <head> <script type="text/javascript"> fu ...

  10. visual studio 配置OpenGL环境

    首先在网上下载一个GLUT工具包. glut.zip,大约一百多kb. 解压之后得到这么几个文件: 将glut.h复制到C:\Program Files (x86)\Microsoft Visual ...