【安徽集训】字符串

Description

  给定小写字母串 \(s,t\),你可以对 \(s\) 进行以下 \(4\) 种操作:
    1. 在任意位置添加一个字符,代价为 \(a\)
    2. 删除任一字符,代价为 \(b\)
    3. 替换任一字符,代价为 \(c\)
    4. 交换相邻两个字符,代价为 \(d\)
  求将 \(s\) 变为 \(t\) 的最小代价。

  \(|s|,|t|\le 4000,\space 0\lt a,b,c,d\le 10000,\space a+b\le 2d\)

Solution

  有一个不存在操作 4 的子任务……
  只考虑前 3 个操作的话,由于要成为 \(t\) 串一部分的所有字符之间的相对顺序不会变,这就变成了一个普及组 dp 题。
  设 \(f(i,j)\) 表示将 \(s\) 的前 \(i\) 个字符修改为 \(t\) 的前 \(j\) 个字符的代价。
  操作1:\(f(i,j)=f(i,j-1)+a\)
  操作2:\(f(i,j)=f(i-1,j)+b\)
  操作3:\(f(i,j)=f(i-1,j-1)+c\)

  然后考虑丧心病狂的操作 \(4\)

猜你喜欢

转载自www.cnblogs.com/scx2015noip-as-php/p/11592182.html
今日推荐