zoukankan      html  css  js  c++  java
  • EOJ 2857 编辑距离

    http://www.acm.cs.ecnu.edu.cn/problem.php?problemid=2857

    一道典型dp,状态转移方程类似LCS。

    操作有三种:1修改一个字母,2删除一个字母,3插入一个字母。

    对于dp[i][j],能从如下状态转移而来:

      if(a[i] == b[j])

        不操作——  对应状态dp[i-1][j-1];

      else

        操作1——a[i]改成b[j],   对应状态dp[i-1][j-1]+1;

        操作2——删a[i],  对应状态dp[i-1][j]+1;

        操作3——在a[i], a[i+1]间插入m,使 m = b[j],   对应状态dp[i][j-1]+1;

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <stdlib.h>
     4 #include <algorithm>
     5 
     6 using namespace std;
     7 
     8 int main()
     9 {
    10     int t;
    11     scanf("%d", &t);
    12     while(t--)
    13     {
    14         char a[505], b[505];
    15         scanf("%s%s", a, b);
    16         int la = strlen(a), lb = strlen(b);
    17         int dp[505][505];
    18         //memset(dp, 0x3f, sizeof(dp));
    19 
    20         for(int i=0; i<=la; i++)
    21             dp[i][0] = i;
    22         for(int j=0; j<=lb; j++)
    23             dp[0][j] = j;
    24         for(int i=1; i<=la; i++)
    25             for(int j=1; j<=lb; j++)
    26                 if(a[i-1] == b[j-1])
    27                     dp[i][j] = dp[i-1][j-1];
    28                 else
    29                     dp[i][j] = min(min(dp[i-1][j], dp[i][j-1]), dp[i-1][j-1])+1;
    30         printf("%d
    ", dp[la][lb]);
    31     }
    32 }
    View Code
  • 相关阅读:
    RichEdit
    用 RAD Studio 柏林版创建 IoT 应用程序
    延时程序
    SQL if exists用法
    Firemonkey限制TEdit只能输入数字的完美方法
    leetcode 树
    leetcode string
    clone-graph
    surrounded-regions merge-intervals
    leetcode链表题
  • 原文地址:https://www.cnblogs.com/KimKyeYu/p/3173777.html
Copyright © 2011-2022 走看看