#435. 商品打包

商品打包

题目描述

商店收到了一批 nn 件商品(nn 为偶数),第 ii 件商品的重量为 aia_i。在销售商品之前,必须将它们打包。打包后有如下要求:

  • 共会有 n2\frac{n}{2} 个包裹,每个包裹恰好包含两件商品;
  • 包含第 ii 件和第 jj 件商品(1i,jn1 \le i, j \le n)的包裹重量为 ai+aja_i + a_j

每个重量为 xx 的包裹,其售价为 xk\left\lfloor\frac{x}{k}\right\rfloor 布尔(向下取整),其中 kk 是一个给定的固定值。

请将商品打包,使得销售所得的总收入最大。换句话说,就是将这 nn 件商品分成 n2\frac{n}{2} 对,使得所有包裹的价值之和 $\sum_{i=1}^{n/2} \left\lfloor\frac{x_i}{k}\right\rfloor$ 最大,其中 xix_i 表示第 ii 个包裹的重量。

例如,设 n=6,k=3n = 6, k = 3,商品重量 a=[3,2,7,1,4,8]a = [3, 2, 7, 1, 4, 8]。可以按如下方式打包:

  • 第一个包裹放第 3 件和第 6 件商品,重量为 a3+a6=7+8=15a_3 + a_6 = 7 + 8 = 15,售价为 153=5\left\lfloor\frac{15}{3}\right\rfloor = 5 布尔。
  • 第二个包裹放第 1 件和第 5 件商品,重量为 a1+a5=3+4=7a_1 + a_5 = 3 + 4 = 7,售价为 73=2\left\lfloor\frac{7}{3}\right\rfloor = 2 布尔。
  • 第三个包裹放第 2 件和第 4 件商品,重量为 a2+a4=2+1=3a_2 + a_4 = 2 + 1 = 3,售价为 33=1\left\lfloor\frac{3}{3}\right\rfloor = 1 布尔。

这种打包方式下,总售价为 5+2+1=85 + 2 + 1 = 8 布尔。

输入格式

输入的第一行包含一个整数 tt1t1041 \le t \le 10^4),表示测试用例的数量。

接下来是每个测试用例的描述。

每个测试用例的第一行包含两个整数 nn2n21052 \le n \le 2\cdot10^5)和 kk1k10001 \le k \le 1000)。nn 保证为偶数。

每个测试用例的第二行包含恰好 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n0ai1090 \le a_i \le 10^9)。

保证所有测试用例中 nn 的总和不超过 21052\cdot10^5

输出格式

对于每个测试用例,输出一行一个整数,表示所有包裹可能获得的最大总售价。

输入输出样例

6
6 3
3 2 7 1 4 8
4 3
2 1 5 6
4 12
0 0 0 0
2 1
1 1
6 10
2 0 0 5 9 4
6 5
5 3 8 6 3 2
8
4
0
2
1
5

说明/提示

第一个测试用例已在题目描述中分析。

第二个测试用例中,如果将第 1 件和第 2 件商品放在第一个包裹,将第 3 件和第 4 件商品放在第二个包裹,可以获得总售价 44

第三个测试用例中,每件商品的售价均为 00,因此总售价也为 00

由 ChatGPT 4.1 翻译