问题 I: 切割木材

内存限制:128 MB 时间限制:1 S
题面:传统 评测方式:文本比较 上传者:
提交:1 通过:1

题目描述

染染船长,亲自上阵!

木材已经被运到船上了,然而直接一根不规则的木材是难以利用的,切割木材就是一道必要的工序了。

作为船长,染染要以身作则分割木材。于是染染挑了其中一根长为 nn 米的木材,其每一米上都标有正整数参数,从左往右第 ii 米的参数为 aiai,参数的范围在 [0,2m)[0,2m) 内。

分割木材都在其整数米处分割,分割后会分成若干段,每个段实际上可以表示为参数序列 a1,a2,⋯,ana1,a2,,an 上的某个区间 al,al+1,⋯,aral,al+1,,ar

对于分割后的一段 al,al+1,⋯,aral,al+1,,ar 具有可计算参数 f(l,r)f(l,r)f(l,r)f(l,r) 在二进制下第 kk 位的值为 11 的条件为 al,al+1,⋯,aral,al+1,,ar 的第 kk 位既不完全为 00 也不完全为 11,否则就为 00

举个例子,比如对于序列 0,2,1,3,50,2,1,3,5,有 f(3,3)=0,f(1,2)=2,f(3,5)=6f(3,3)=0,f(1,2)=2,f(3,5)=6

而实际上还有一个转换函数 g(x)g(x),分割后的一段 al,al+1,⋯,aral,al+1,,ar 的价值为 g(f(l,r))g(f(l,r))。不幸的是,g(x)g(x) 是一个性质相当恶劣的函数,所以染染和手下的水手只能靠实验得到了 g(x)g(x) 的在 0,1,⋯,2m−10,1,,2m1 处的取值。

对于一个分割方案,假设其具有 kk 次分割,分割位置从左往右分别为第 p1,p2,⋯,pkp1,p2,,pk 米处,则最终整个分割方案的价值为:g(f(1,p1))+g(f(p1+1,p2))+⋯+g(f(pk+1,n))g(f(1,p1))+g(f(p1+1,p2))++g(f(pk+1,n))

注意,这里 kk 可以为 00,同时要求 0<p1<p2<⋯<pk<n0<p1<p2<<pk<n

现在,为了物尽其用,染染希望最大化分割方案的价值。

输入格式

本题单个测试点内包含多组测试数据。

输入第一行一个正整数 T (1≤T≤20)T (1T20),表示数据组数。

每组数据第一行两个非负整数 n (1≤n≤105)n (1n105) 和 m (0≤m≤20)m (0m20),分别表示木材的长度和参数范围。

第二行 nn 个非负整数 a1,a2,⋯,an (0≤ai<2m)a1,a2,,an (0ai<2m),表示参数序列。

第三行 2m2m 个整数 g(0),g(1),⋯,g(2m−1) (−109≤g(i)≤109)g(0),g(1),,g(2m1) (109g(i)109),表示函数 g(x)g(x) 的取值。

保证单个测试点内每组数据中 nn 的和不超过 1061062m2m 的和不超过 222222

输出格式

对于每组数据输出一行一个整数,表示分割方案价值的最大值。

输入样例 复制

1
5 2
1 2 1 2 0
0 1 3 2

输出样例 复制

5

数据范围与提示

最优方案是分成 1,2,31,2,3 和 4,54,5 两段,答案为:g(f(1,3))+g(f(4,5))=g(3)+g(2)=2+3=5g(f(1,3))+g(f(4,5))=g(3)+g(2)=2+3=5