#MOCKS31. 积木整理(prun)

0

积木整理(prun)

积木整理(prun)

题目描述

Y 同学正在整理一排共 NN 个积木,每个积木的高度为 aia_i。已知所有积木的高度两两不同。为了满足陈列要求,Y 同学需要将当前的积木序列 A=(a1,a2,…,aN)A = (a_1, a_2, \dots, a_N) 转化为目标序列 B=(b1,b2,…,bM)B = (b_1, b_2, \dots, b_M)。

在整理过程中,Y 同学可以使用以下两种操作:

  1. 机械化清理:消耗 xx 单位能量,选择序列中连续的 kk 个积木并将其全部移除。注意,每次必须正好移除 kk 个积木。
  2. 手工拆除:消耗 yy 单位能量,选择序列中相邻的两个积木,将其中高度较低的一个移除。

Y 同学希望通过上述操作,以最小的能量消耗将序列 AA 变为序列 BB(BB 是 AA 的子序列)。如果无法达成目标,请输出 −1-1。

输入格式

第一行包含两个整数 NN 和 MM,分别表示原积木序列的长度和目标序列的长度。

第二行包含三个整数 x,k,yx, k, y,分别表示机械化清理的能量消耗、清理的范围长度以及手工拆除的能量消耗。

第三行包含 NN 个整数 a1,a2,…,aNa_1, a_2, \dots, a_N,表示原序列中各积木的高度。

第四行包含 MM 个整数 b1,b2,…,bMb_1, b_2, \dots, b_M,表示目标序列中各积木的高度。

输出格式

输出一个整数,表示完成转化所需的最小能量消耗。若无解,则输出 −1-1。

样例

样例输入 #1

5 2
5 2 3
3 1 4 5 2
3 5

样例输出 #1

8

样例输入 #2

4 4
5 1 4
4 3 1 2
2 4 3 1

样例输出 #2

-1

样例输入 #3

4 4
2 1 11
1 3 2 4
1 3 2 4

样例输出 #3

0

数据范围与约定

对于 100%100\% 的数据,保证 1≤N,M≤2×1051 \le N, M \le 2 \times 10^5,1≤x,y≤1091 \le x, y \le 10^9,1≤k≤N1 \le k \le N,1≤ai,bi≤N1 \le a_i, b_i \le N。

测试点编号 分值 N,M≤N, M \le 特殊性质
1∼21 \sim 2 1010 无
3∼63 \sim 6 2020 2×1052 \times 10^5 特殊性质 A
7∼107 \sim 10 特殊性质 B
11∼1411 \sim 14 50005000 无
15∼2015 \sim 20 3030 2×1052 \times 10^5
  • 特殊性质 A:保证 x≤y⋅kx \le y \cdot k。
  • 特殊性质 B:保证 k=1k = 1。