主题链接:点击打开链接

编辑距离。,== 一边dp虽然录制前体累,,依然是dp

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<vector>
  4. #include<string.h>
  5. using namespace std;
  6. #define ll int
  7. #define N 1010
  8. char s[N], t[N];
  9. int dp[N][N], n, m;
  10. // 0为插入 1为删除 2 3为替换
  11. struct node{
  12. int op;
  13. int pos; char c;
  14. node(int A=0,int E=0,char D=0):op(A),pos(E), c(D){}
  15. void put(){
  16. if(op== 2)
  17. printf("REPLACE %d %c\n", pos, c);
  18. else if(op == 0)
  19. printf("INSERT %d %c\n", pos +1, c);
  20. else if(op == 1)
  21. printf("DELETE %d\n", pos);
  22. }
  23. }P;
  24. void dfs(int a, int b){
  25. if(a == 0 && b==0)return ;
  26. if(s[a] == t[b] && dp[a-1][b-1] == dp[a][b])
  27. dfs(a-1, b-1);
  28. else
  29. {
  30. if(a && dp[a-1][b] +1 == dp[a][b])
  31. {
  32. P = node(1, a);
  33. P.put();
  34. dfs(a-1, b);
  35. }
  36. else if(b && dp[a][b-1] +1 == dp[a][b])
  37. {
  38. P = node(0, a, t[b]);
  39. P.put();
  40. dfs(a, b-1);
  41. }
  42. else if(a && b && dp[a-1][b-1] +1 == dp[a][b])
  43. {
  44. P = node(2, a, t[b]);
  45. P.put();
  46. dfs(a-1, b-1);
  47. }
  48. }
  49. }
  50. void input(){
  51. scanf("%s", t+1);
  52. n = strlen(s+1);
  53. m = strlen(t+1);
  54. }
  55. int main(){
  56. int i, j;
  57. while(~scanf("%s", s+1)){
  58. input();
  59. dp[0][0] = 0;
  60. for(i = 1; i <= n; i++)
  61. dp[i][0] = i;
  62. for(i = 1; i <= m; i++)
  63. dp[0][i] = i;
  64. for(i = 1; i <= n; i++)
  65. for(j = 1; j <= m; j++)
  66. dp[i][j] = min(min(dp[i-1][j], dp[i][j-1])+1, dp[i-1][j-1] + (s[i]!=t[j]));
  67. printf("%d\n", dp[n][m]);
  68. dfs(n, m);
  69. }
  70. return 0;
  71. }

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Codeforces 56D Changing a String 编辑距离 记忆dp的更多相关文章

  1. Codeforces 56D Changing a String (DP)

    题意:你可以对字符串s进行3种操作: 1,在pos位置插入字符ch. 2,删除pos位置的字符. 3,替换pos位置的字符为ch. 问最少需要多少次操作可以把字符s变成字符s1? 思路: 设dp[i] ...

  2. Codeforces 56D Changing a String

    http://codeforces.com/contest/56/problem/D 题目大意: 一个字符串变为目标字符串,可以执行插入,置换和删除3种操作,求最少操作数. 思路:dp[i][j]代表 ...

  3. 2018.12.12 codeforces 931E. Game with String(概率dp)

    传送门 感觉这题难点在读懂题. 题目简述:给你一个字符串s,设将其向左平移k个单位之后的字符串为t,现在告诉你t的第一个字符,然后你可以另外得知t的任意一个字符,求用最优策略猜对k的概率. 解析: 预 ...

  4. Codeforces Hello 2018 E题Logical Expression dp+最短路 好题

    j题目链接: http://codeforces.com/contest/913/problem/E 题意: 给你x,y,z三个变量,与&   或|  非!  括号()   四种运算符,规定括 ...

  5. Codeforces 219D. Choosing Capital for Treeland (树dp)

    题目链接:http://codeforces.com/contest/219/problem/D 树dp //#pragma comment(linker, "/STACK:10240000 ...

  6. Codeforces #541 (Div2) - E. String Multiplication(动态规划)

    Problem   Codeforces #541 (Div2) - E. String Multiplication Time Limit: 2000 mSec Problem Descriptio ...

  7. [CodeForces - 1272D] Remove One Element 【线性dp】

    [CodeForces - 1272D] Remove One Element [线性dp] 标签:题解 codeforces题解 dp 线性dp 题目描述 Time limit 2000 ms Me ...

  8. leetcode 72.编辑距离(dp)

    链接:https://leetcode-cn.com/problems/edit-distance/submissions/ 设dp[i][j]表示串s1前i个字符变换成串s2前j个字符所需要的最小操 ...

  9. Codeforces 148D Bag of mice:概率dp 记忆化搜索

    题目链接:http://codeforces.com/problemset/problem/148/D 题意: 一个袋子中有w只白老鼠,b只黑老鼠. 公主和龙轮流从袋子里随机抓一只老鼠出来,不放回,公 ...

随机推荐

  1. python 中函数参数传递形式

    python中函数参数的传递是通过赋值来传递的.函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要 ...

  2. python 模块BeautifulSoup使用

    BeautifulSoup是一个专门用于解析html/xml的库.官网:http://www.crummy.com/software/BeautifulSoup/ 说明,BS有了4.x的版本了.官方说 ...

  3. 经典switch

  4. 数学之路(3)-机器学习(3)-机器学习算法-SVM[9]

    我们应用SVM的非线性分类功能对手写数字进行识别,我们在这应用poly做为非线性核 svm = mlpy.LibSvm(svm_type='c_svc', kernel_type='poly',gam ...

  5. ThinkPHP - F函数,更新配置文件

    Html代码: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=&quo ...

  6. CodeForces 486C Palindrome Transformation 贪心+抽象问题本质

    题目:戳我 题意:给定长度为n的字符串,给定初始光标位置p,支持4种操作,left,right移动光标指向,up,down,改变当前光标指向的字符,输出最少的操作使得字符串为回文. 分析:只关注字符串 ...

  7. js中的总结汇总(以后的都收集到这篇)

    点1:js中的比较字符串是否相等,js中是用"=="这个来判断是否相等,这点跟java中不一样,java中是.equals()这种方法. 在之前写的ajax的demo中,因为用了. ...

  8. iOS8的屏幕旋转的问题

    判断横竖屏.http://www.cocoachina.com/ask/questions/show/121301 //self.cameraView是相机view - (NSUInteger)sup ...

  9. 用Verilog实现IIC通讯

    注意,此代码是错误代码,并不能实现想要的结果. 之所以留着,因为里面的enable 是独立开来的思想值得借鉴.就是控制单元和运算单元分开(我也是借鉴别人的实现思想).具体用verilogHDL实现II ...

  10. Genymotion Unable to create Virtual Device:Connection timeout

    1.进入C:\Users\[UserName]\AppData\Local\Genymobile,打开genymotion.log,找到最后几句话:     九月 2 14:29:45 [Genymo ...