题目:编辑距离。给你两个串,将已知串转化成目标串,能够增、删、改字母,求最小操作次数。

分析:dp,编辑距离。同最大公共子序列。

注意操作位置是实时变化的。

(前面都已经处理好了)

                     f[i][j] = f[i-1][j]         这时删掉 str1[i],位置j+1。

                     f[i][j] = f[i][j-1]         这时添加 str2[j]。位置j;

                     f[i][j] = f[i-1][j-1]+k  假设str1[i] == str2[j]这时同样k=0,否则k=1,位置j。

说明:注意是str1变成str2;变化位置是这一步时所在的位置(前面的都处理过了)。

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio> char str1[24],str2[24];
int dp[24][24],op[24][24]; void output( int i, int j )
{
if ( !i && !j ) return;
if ( op[i][j] == 1 ) {
output( i-1, j );
printf("D%c%02d",str1[i-1],j+1);
}else if ( op[i][j] == 2 ) {
output( i, j-1 );
printf("I%c%02d",str2[j-1],j);
}else if ( op[i][j] == 3 ){
output( i-1, j-1 );
printf("C%c%02d",str2[j-1],j);
}else output( i-1, j-1 );
} int main()
{
while ( scanf("%s",str1) && str1[0] != '#' ) {
scanf("%s",str2);
int l1 = strlen(str1);
int l2 = strlen(str2);
for ( int i = 0 ; i <= l1 ; ++ i )
for ( int j = 0 ; j <= l2 ; ++ j ) {
dp[i][j] = 400;
op[i][j] = 0;
} //初始化
for ( int i = 0 ; i <= l1 ; ++ i ) {
op[i][0] = 1; dp[i][0] = i;
}
for ( int i = 0 ; i <= l2 ; ++ i ) {
op[0][i] = 2; dp[0][i] = i;
} for ( int i = 1 ; i <= l1 ; ++ i )
for ( int j = 1 ; j <= l2 ; ++ j ) {
if ( str1[i-1] != str2[j-1] ) {
op[i][j] = 3; dp[i][j] = dp[i-1][j-1]+1;
}else dp[i][j] = dp[i-1][j-1];
if ( dp[i-1][j]+1 < dp[i][j] ) {
op[i][j] = 1; dp[i][j] = dp[i-1][j]+1;
}
if ( dp[i][j-1]+1 < dp[i][j] ) {
op[i][j] = 2; dp[i][j] = dp[i][j-1]+1;
}
}
output( l1, l2 );
printf("E\n");
}
return 0;
}

UVa 164 - String Computer的更多相关文章

  1. 区间DP UVA 10739 String to Palindrome

    题目传送门 /* 题意:三种操作,插入,删除,替换,问最少操作数使得字符串变成回文串 区间DP:有一道类似的题,有点不同的是可以替换,那么两端点不同的时候可以替换掉一个后成回文, 即dp[j+1][k ...

  2. 区间DP UVA 1351 String Compression

    题目传送门 /* 题意:给一个字符串,连续相同的段落可以合并,gogogo->3(go),问最小表示的长度 区间DP:dp[i][j]表示[i,j]的区间最小表示长度,那么dp[i][j] = ...

  3. UVA 1351 - String Compression

    题意: 对于一个字符串中的重复部分可以进行缩写,例如"gogogo"可以写成"3(go)",从6个字符变成5个字符.."nowletsgogogole ...

  4. UVA 10739 String to Palindrome(动态规划 回文)

    String to Palindrome 题目大意:给出一个字符串s,现在可以进行3种操作(添加字母,删除字母,替换字母),将其变成回文串,求出最少的操作次数.比如abccda,可以用删除操作,删除b ...

  5. UVA 10739 String to Palindrome(dp)

    Problem H String to Palindrome Input: Standard Input Output: Standard Output Time Limit: 1 Second In ...

  6. EOJ 1641/UVa The SetStack Computer

    Background from Wikipedia: “Set theory is a branch of mathematics created principally by the German ...

  7. UVa 908 - Re-connecting Computer Sites

    题目大意:有n个网站,由m条线路相连,每条线路都有一定的花费,找出连接所有线路的最小花费. 最小生成树问题(Minimal Spanning Tree, MST),使用Kruskal算法解决. #in ...

  8. 一位学长的ACM总结(感触颇深)

    发信人: fennec (fennec), 信区: Algorithm 标 题: acm 总结 by fennec 发信站: 吉林大学牡丹园站 (Wed Dec 8 16:27:55 2004) AC ...

  9. jquery 、 JS 脚本参数的认识与使用

    jquery . JS 脚本参数的认识与使用 如何使用jquery刷新当前页面 下面介绍全页面刷新方法:有时候可能会用到 window.location.reload(); //刷新当前页面. par ...

随机推荐

  1. 四十二 常用内建模块 collections

    collections是Python内建的一个集合模块,提供了许多有用的集合类. namedtuple 我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成: >>> ...

  2. python模式匹配,提取指定字段

    re匹配时分多行模式(re.M)与单行模式(rs.S),多行模式是每一行单独匹配,单行模式是把所有的行当成一行来匹配. 单行模式下.可以匹配换行符. ^$匹配所有字符 import re s='1_2 ...

  3. 【笔试题】Spring笔试题

    spring笔试题 1.Spring支持的事务管理类型 Spring支持两种类型的事务管理: 编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护. 声明式事务管理:这意味 ...

  4. ubuntu安装过程记录

    [DNS修改] 新下载的ubuntu 17.04 安装后DNS是指向谷歌DNS的,谷歌被屏蔽啦,所以无法解析域名.解决办法: ctrl+alt+t 启动终端 : sudo su  输入管理員密碼,或去 ...

  5. java File类 打印目录树状结构(递归)

    import java.io.File; /** * 递归遍历 * */ public class FieTree { public static void main(String[] args) { ...

  6. 一个菜鸟正在用SSH写一个论坛(2)

    额 一不小心又一个多月没有写过随笔了. 这次是在某次启动服务器的时候报错了: 严重: Exception starting filter struts2 Unable to load configur ...

  7. 第4天:Ansible模块

    Ansible对远程服务器的实际操作实际是通过模块完成的,其工作原理如下: 1)将模块拷贝到远程服务器 2)执行模块定义的操做,完成对服务器的修改 3)在远程服务器中删除模块 需要说明的是,Ansib ...

  8. JQ简单操作Ajax笔记

    JQ对ajax进行了封装,底层$.ajax().第二层是.load(),$.get(),$.post().第三层是$.getScript()和$.getJSON(). load(url selecto ...

  9. 【BZOJ 3530】【SDOI 2014】数数

    http://www.lydsy.com/JudgeOnline/problem.php?id=3530 上午gty的测试题,爆0了qwq 类似文本生成器那道题,把AC自动机的转移建出来,准确地说建出 ...

  10. [Codeforces #190] Tutorial

    Link: Codeforces #190 传送门 A: 明显答案为$n+m-1$且能构造出来 #include <bits/stdc++.h> using namespace std; ...