Codeforces 56D Changing a String 编辑距离 记忆dp
主题链接:点击打开链接
编辑距离。,== 一边dp虽然录制前体累,,依然是dp
- #include<iostream>
- #include<cstdio>
- #include<vector>
- #include<string.h>
- using namespace std;
- #define ll int
- #define N 1010
- char s[N], t[N];
- int dp[N][N], n, m;
- // 0为插入 1为删除 2 3为替换
- struct node{
- int op;
- int pos; char c;
- node(int A=0,int E=0,char D=0):op(A),pos(E), c(D){}
- void put(){
- if(op== 2)
- printf("REPLACE %d %c\n", pos, c);
- else if(op == 0)
- printf("INSERT %d %c\n", pos +1, c);
- else if(op == 1)
- printf("DELETE %d\n", pos);
- }
- }P;
- void dfs(int a, int b){
- if(a == 0 && b==0)return ;
- if(s[a] == t[b] && dp[a-1][b-1] == dp[a][b])
- dfs(a-1, b-1);
- else
- {
- if(a && dp[a-1][b] +1 == dp[a][b])
- {
- P = node(1, a);
- P.put();
- dfs(a-1, b);
- }
- else if(b && dp[a][b-1] +1 == dp[a][b])
- {
- P = node(0, a, t[b]);
- P.put();
- dfs(a, b-1);
- }
- else if(a && b && dp[a-1][b-1] +1 == dp[a][b])
- {
- P = node(2, a, t[b]);
- P.put();
- dfs(a-1, b-1);
- }
- }
- }
- void input(){
- scanf("%s", t+1);
- n = strlen(s+1);
- m = strlen(t+1);
- }
- int main(){
- int i, j;
- while(~scanf("%s", s+1)){
- input();
- dp[0][0] = 0;
- for(i = 1; i <= n; i++)
- dp[i][0] = i;
- for(i = 1; i <= m; i++)
- dp[0][i] = i;
- for(i = 1; i <= n; i++)
- for(j = 1; j <= m; j++)
- dp[i][j] = min(min(dp[i-1][j], dp[i][j-1])+1, dp[i-1][j-1] + (s[i]!=t[j]));
- printf("%d\n", dp[n][m]);
- dfs(n, m);
- }
- return 0;
- }
版权声明:本文博客原创文章,博客,未经同意,不得转载。
Codeforces 56D Changing a String 编辑距离 记忆dp的更多相关文章
- Codeforces 56D Changing a String (DP)
题意:你可以对字符串s进行3种操作: 1,在pos位置插入字符ch. 2,删除pos位置的字符. 3,替换pos位置的字符为ch. 问最少需要多少次操作可以把字符s变成字符s1? 思路: 设dp[i] ...
- Codeforces 56D Changing a String
http://codeforces.com/contest/56/problem/D 题目大意: 一个字符串变为目标字符串,可以执行插入,置换和删除3种操作,求最少操作数. 思路:dp[i][j]代表 ...
- 2018.12.12 codeforces 931E. Game with String(概率dp)
传送门 感觉这题难点在读懂题. 题目简述:给你一个字符串s,设将其向左平移k个单位之后的字符串为t,现在告诉你t的第一个字符,然后你可以另外得知t的任意一个字符,求用最优策略猜对k的概率. 解析: 预 ...
- Codeforces Hello 2018 E题Logical Expression dp+最短路 好题
j题目链接: http://codeforces.com/contest/913/problem/E 题意: 给你x,y,z三个变量,与& 或| 非! 括号() 四种运算符,规定括 ...
- Codeforces 219D. Choosing Capital for Treeland (树dp)
题目链接:http://codeforces.com/contest/219/problem/D 树dp //#pragma comment(linker, "/STACK:10240000 ...
- Codeforces #541 (Div2) - E. String Multiplication(动态规划)
Problem Codeforces #541 (Div2) - E. String Multiplication Time Limit: 2000 mSec Problem Descriptio ...
- [CodeForces - 1272D] Remove One Element 【线性dp】
[CodeForces - 1272D] Remove One Element [线性dp] 标签:题解 codeforces题解 dp 线性dp 题目描述 Time limit 2000 ms Me ...
- leetcode 72.编辑距离(dp)
链接:https://leetcode-cn.com/problems/edit-distance/submissions/ 设dp[i][j]表示串s1前i个字符变换成串s2前j个字符所需要的最小操 ...
- Codeforces 148D Bag of mice:概率dp 记忆化搜索
题目链接:http://codeforces.com/problemset/problem/148/D 题意: 一个袋子中有w只白老鼠,b只黑老鼠. 公主和龙轮流从袋子里随机抓一只老鼠出来,不放回,公 ...
随机推荐
- python 中函数参数传递形式
python中函数参数的传递是通过赋值来传递的.函数参数的使用又有俩个方面值得注意:1.函数参数是如何定义的 2.在调用函数的过程中参数是如何被解析 先看第一个问题,在python中函数参数的定义主要 ...
- python 模块BeautifulSoup使用
BeautifulSoup是一个专门用于解析html/xml的库.官网:http://www.crummy.com/software/BeautifulSoup/ 说明,BS有了4.x的版本了.官方说 ...
- 经典switch
- 数学之路(3)-机器学习(3)-机器学习算法-SVM[9]
我们应用SVM的非线性分类功能对手写数字进行识别,我们在这应用poly做为非线性核 svm = mlpy.LibSvm(svm_type='c_svc', kernel_type='poly',gam ...
- ThinkPHP - F函数,更新配置文件
Html代码: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset=&quo ...
- CodeForces 486C Palindrome Transformation 贪心+抽象问题本质
题目:戳我 题意:给定长度为n的字符串,给定初始光标位置p,支持4种操作,left,right移动光标指向,up,down,改变当前光标指向的字符,输出最少的操作使得字符串为回文. 分析:只关注字符串 ...
- js中的总结汇总(以后的都收集到这篇)
点1:js中的比较字符串是否相等,js中是用"=="这个来判断是否相等,这点跟java中不一样,java中是.equals()这种方法. 在之前写的ajax的demo中,因为用了. ...
- iOS8的屏幕旋转的问题
判断横竖屏.http://www.cocoachina.com/ask/questions/show/121301 //self.cameraView是相机view - (NSUInteger)sup ...
- 用Verilog实现IIC通讯
注意,此代码是错误代码,并不能实现想要的结果. 之所以留着,因为里面的enable 是独立开来的思想值得借鉴.就是控制单元和运算单元分开(我也是借鉴别人的实现思想).具体用verilogHDL实现II ...
- Genymotion Unable to create Virtual Device:Connection timeout
1.进入C:\Users\[UserName]\AppData\Local\Genymobile,打开genymotion.log,找到最后几句话: 九月 2 14:29:45 [Genymo ...