#557. LRU is Best? (Hard Version)

传统 1000 ms 1024 MiB
标准 IO
文本比较 dd

题目描述

简单版和困难版的区别仅在于简单版对于数组 xxyyzz 有额外约束,在困难版中对于三个数组中的值没有额外约束。

有一个长度为 nn 的数组 aa 和三个长度为 nn 的数组 x,y,zx,y,zaa 中的所有数字都是 11nn 的正整数。同时,还有一个长度为 m(mn)m(m\le n) 的数组 bb,初始时数组 bb 中的所有元素都是 00。你的初始得分 scorescore00

你需要从左到右遍历数组 aa,并且在你遍历到第 ii 个数字 aia_i 时:

  • 假如数字 aia_i 在数组 bb 中,你的得分 scorescore 增加 xix_i
  • 否则,你的得分 scorescore 扣除 yiy_i。接下来,你可以选择一个位置 j(1jm)j(1\le j\le m),将数组 bb 中第 jj 个数字 bjb_j 替换为 aia_i 并且使你的得分扣除 ziz_i(或者不进行替换操作)。

在遍历完所有数字后,你的得分 scorescore 的最大值是多少?

输入格式

第一行,一个整数 t(1t100)t(1\le t\le 100),代表数据组数。

对于每组数据:

第一行,两个整数 n,m(1mn800)n,m(1\le m\le n\le 800),分别代表数组 aa 的长度和数组 bb 的长度。

第二行,nn 个整数 a1,,an(1ain)a_1,\dots,a_n(1\le a_i\le n),代表数组 aa

第三行,nn 个整数 x1,,xn(1xi109)x_1,\dots,x_n(1\le x_i\le 10^9),代表数组 xx

第四行,nn 个整数 y1,,yn(0yi109)y_1,\dots,y_n(0\le y_i\le 10^9),代表数组 yy

第五行,nn 个整数 z1,,zn(0zi109)z_1,\dots,z_n(0\le z_i\le 10^9),代表数组 zz

保证同一测试点内 nn 的总和不超过 800800

输出格式

对于每组数据,输出一个整数 scorescore,代表在最优替换方案下你的得分的最大值。

样例

输入样例

14
2 2
1 2
1 1
0 0
0 0
5 2
1 2 2 2 1
1 1 1 1 1
0 0 0 0 0
0 0 0 0 0
6 2
1 2 3 4 5 1
1 1 1 1 1 1
0 0 0 0 0 0
0 0 0 0 0 0
10 3
1 2 3 2 1 4 1 2 4 3
1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
10 5
1 6 1 5 5 9 7 7 8 8
1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
10 2
3 7 1 6 3 10 4 3 1 2
1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
10 1
1 2 1 2 1 2 1 2 1 1
1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
2 2
1 2
9 9
1 2
8 1
5 2
1 2 2 2 1
8 2 4 5 9
6 8 3 1 8
5 5 3 2 6
6 2
1 2 3 4 5 1
3 2 8 4 9 5
3 0 2 1 9 8
1 2 9 0 8 3
10 3
1 2 3 2 1 4 1 2 4 3
5 9 8 1 5 7 9 8 7 1
5 5 6 1 2 8 7 2 1 0
9 0 0 0 2 7 9 6 9 6
10 5
1 6 1 5 5 9 7 7 8 8
10 14 14 16 8 7 17 2 6 5
6 1 7 9 9 0 5 9 0 2
4 4 6 5 6 4 3 8 0 8
10 2
3 7 1 6 3 10 4 3 1 2
9 2 1 4 3 6 7 1 1 8
0 0 0 0 0 0 0 0 0 0
3 7 4 2 2 0 1 4 7 3
10 1
1 2 1 2 1 2 1 2 1 1
1 1 1 1 1 1 1 1 1 1
0 1 0 1 0 1 0 1 0 0
1 0 0 0 0 0 0 0 0 0

输出样例

0
3
1
5
4
3
5
-3
-6
-11
-10
-4
1
3