[SDOI2006] 最短距离

题目描述

一种 EDIT 字母编辑器,它的功能是可以通过不同的变换操作可以把一个源串 $X[l\cdots m]$ 变换为新的目标串 $Y[1\cdots n]$。EDIT 提供的变换操作有: - 删除源串首个字符(delete); - 替换源串首个字符放到目标串末尾(replace)。replace 操作可以替换为与原来相同的字符; - 移动源串首个字符放到目标串末尾(copy); - 向目标串插入单个字符(insert); - 交换源串中的两个相邻字符,并移动到目标串末尾中去(twiddle); - 在完成其它所有操作之后,源串中余下的全部后缀就可用删至行末的操作删除(kill)。 例如,将源 `algorithm` 转换成目标串 `altruistic` 的一种方法是采取下面的操作序列: | 操作 | 目标串 | 原串 | | :----------: | :----------: | :----------: | | 初始 | (空) | `algorithm` | | `copy a` | `a` | `lgorithm` | | `copy l` | `al` | `gorithm` | | `replace g to t` | `alt` | `orithm` | | `delete o` | `alt` | `rithm` | | `copy r` | `altr` | `ithm` | | `insert u` | `altru` | `ithm` | | `insert i` | `altrui` | `ithm` | | `insert s` | `altruis` | `ithm` | | `twiddle it into ti` | `altruisti` | `hm` | | `replace h to c` | `altruistic` | `m` | | `kill` | `altruistic` | (空) | 要达到这个结果还可能有其它一些操作序列。 操作 delete、replace、copy、insert、twiddle 和kill中每一个都有一个相联系的代价 cost。例如: ```plain cost(delete) =3; cost(replace)=6; cost(copy) =5; cost(insert) =4; cost(twiddle)=4; cost(kill) = 被删除的串长 * cost(delete) - 1; ``` 一个给定的操作序列的代价为序列中各操作代价之和。 例如上述操作序列的代价为 $$\begin{aligned}&3\times \mathrm{cost}(\mathtt{copy})+2\times \mathrm{cost}(\mathtt{replace})+\mathrm{cost}(\mathtt{delete})+3\times \mathrm{cost}(\mathtt{insert}) \\ &+\mathrm{cost}(\mathtt{twiddle}) +\mathrm{cost}(\mathtt{kill}) \\ =\ & 3\times 5+2\times 6+3+3\times 4+4+1\times 3-1\\ =\ &48\end{aligned}$$ **编程任务** 给定两个序列 $X[1\cdots m],Y[1\cdots n]$ 和一些操作代价集合,$X$ 到 $Y$ 的最短距离为将 $X$ 转化为 $Y$ 的最小的转换序列的代价。请给出一个算法来找出 $X[1\cdots m]$ 至 $Y[1\cdots n]$ 的最短距离。

输入输出格式

输入格式


第一行:源序列 $X[1\cdots m]$。 第二行:目标序列 $Y[1\cdots n]$。 第三行:$5$ 个正整数,分别是:delete、replace、copy、insert、twiddle 的代价。

输出格式


一行一个整数,表示 $X$ 到 $Y$ 的最短距离(最小代价和)。

输入输出样例

输入样例 #1

algorithm
altruistic
3 6 5 4 4

输出样例 #1

48

说明

### 数据范围及约定 对于全部数据,满足 $1\le n,m\le 200$,且所有代价均为不大于 $100$ 的非负整数。