题目链接:点击打开链接

有一个交换操作比較特殊,所以记录每一个点距离自己近期的那个字符的位置

然后交换就相当于把第一行要交换的2个字符 之间的字符都删掉

把第二行要交换的2个字符 之间的字符都插入第一行的2个字符之间

然后再进行交换。

#include <cstdio>
#include <cstring>
#include<iostream>
using namespace std;
#define inf 10000000
#define N 4005
#define get_min(a,b) {a=min(a,b);}
int dp[N][N], t1, t2, t3, t4;
int p1[N][30], p2[N][30];
char s[N], t[N];
int n, m;
void input(){
scanf("%s",s+1); scanf("%s",t+1);
n = strlen(s+1); m = strlen(t+1);
memset(p1[0], -1, sizeof p1[0]);
memset(p2[0], -1, sizeof p2[0]);
}
int main(){
int i,j,x,y;
while(~scanf("%d %d %d %d",&t1,&t2,&t3,&t4)){
input();
for(i = 0; i <= n; i++)for(j = 0; j <= m; j++)dp[i][j] = inf;
dp[0][0] = 0;
for(i = n; i ; i--)
{
memcpy(p1[i], p1[i+1], sizeof p1[i]);
p1[i][s[i]-'a']=i;
}
for(i = m; i; i--)
{
memcpy(p2[i], p2[i+1], sizeof p2[i]);
p2[i][t[i]-'a']=i;
}
for(i = 0; i <= n; i++)
for(j = 0; j <= m; j++)
{
if(s[i+1] == t[j+1])
get_min(dp[i+1][j+1], dp[i][j]);
get_min(dp[i+1][j], dp[i][j]+t2);
get_min(dp[i][j+1], dp[i][j]+t1);
get_min(dp[i+1][j+1], dp[i][j]+t3);
if ((x = p1[i + 2][t[j + 1] - 'a']) && (y = p2[j + 2][s[i + 1] - 'a'])) {
get_min(dp[x][y], dp[i][j] + (x - i - 2) * t2 + (y - j - 2) * t1 + t4);
}
}
cout<<dp[n][m]<<endl;
}
return 0;
}

Codeforces 67C Sequence of Balls 编辑距离 dp的更多相关文章

  1. HDU 4323 Magic Number(编辑距离DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=4323 题意: 给出n个串和m次询问,每个询问给出一个串和改变次数上限,在不超过这个上限的情况下,n个串中有多少个 ...

  2. [Codeforces 865C]Gotta Go Fast(期望dp+二分答案)

    [Codeforces 865C]Gotta Go Fast(期望dp+二分答案) 题面 一个游戏一共有n个关卡,对于第i关,用a[i]时间通过的概率为p[i],用b[i]通过的时间为1-p[i],每 ...

  3. [CodeForces - 1225E]Rock Is Push 【dp】【前缀和】

    [CodeForces - 1225E]Rock Is Push [dp][前缀和] 标签:题解 codeforces题解 dp 前缀和 题目描述 Time limit 2000 ms Memory ...

  4. [Codeforces 553E]Kyoya and Train(期望DP+Floyd+分治FFT)

    [Codeforces 553E]Kyoya and Train(期望DP+Floyd+分治FFT) 题面 给出一个\(n\)个点\(m\)条边的有向图(可能有环),走每条边需要支付一个价格\(c_i ...

  5. Codeforces 56D Changing a String 编辑距离 记忆dp

    主题链接:点击打开链接 编辑距离.,== 一边dp虽然录制前体累,,依然是dp #include<iostream> #include<cstdio> #include< ...

  6. codeforces 553A A. Kyoya and Colored Balls(组合数学+dp)

    题目链接: A. Kyoya and Colored Balls time limit per test 2 seconds memory limit per test 256 megabytes i ...

  7. Codeforces 13C Sequence dp

    题目链接:http://codeforces.com/problemset/problem/13/C 题意: 给定n长的序列 每次操作能够给每一个数++或-- 问最少须要几步操作使得序列变为非递减序列 ...

  8. Codeforces 13C Sequence --DP+离散化

    题意:给出一个 n (1 <= n <= 5000)个数的序列 .每个操作可以把 n 个数中的某一个加1 或 减 1.问使这个序列变成非递减的操作数最少是多少 解法:定义dp[i][j]为 ...

  9. Codeforces 467C George and Job(DP)

    题目 Source http://codeforces.com/contest/467/problem/C Description The new ITone 6 has been released ...

随机推荐

  1. 巧记--Css选择器

    love  ------>   hate 即: a:link   -->  a:visited  -->  a:hover   -->  a:active a:link     ...

  2. 私人C#笔记

      coust 定义常量 string是密封类,所以不能继承它 namespace默认是按照文件夹的结构命名的,如(System.文件夹.子文件夹),而且namespace是可以手动改的   Arra ...

  3. 如何在pl/sql developer 7运行到oracle存储过程设置断点的地方

    如何高效调试oracle存储过程,尤其是父子网状调用的存储过程 1,在需要设置断点的oracle存储过程处设置断点         如何设置断点:直接在某行oracle存储过程处单击行首,会在行首显示 ...

  4. SQL Server链接MySQL实践

    最近在访问多数据库的时候进行了SQLServer链接MySQL数据的实践,现总结如下: 一.  安装mysql-connector-odbc驱动: 1. 在SQL Server服务器的机器上安装mys ...

  5. MySQL在Linux系统下配置文件详解

    在日常的的开发过程中接触到了SQLServer和MySQL数据库的操作性问题,可能是以前接触的都是SQL Server,才开始接触MySQL,总感觉使用MySQL没有使用SQLserver那么顺手,一 ...

  6. static说明

    1.最基本用法:加static的全局变量或者函数,只能在本文件中使用.可见性只在本文件中. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性.为理解这句话,我举例来说 ...

  7. window.open() | close()方法

    Window对象的open()方法可以打开一个新的浏览器窗口(或标签页),window.open()载入指定的URL到新的或已存在的窗口中,返回代表那个窗口的window对象,它有4个可选的参数 1. ...

  8. iphone手机端图片错位修正的js代码

    <script type="text/javascript"> $(function(){ // 获取终端的相关信息 var Terminal = { // 辨别移动终 ...

  9. 在js中使用json

    在js中使用json var obj = {     "1" : "value1",     "2" : "value2" ...

  10. 异步编程设计模式 - IronPythonDebugger

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsof ...