先把每个元素的“基础贡献”记为:
wi=c×(xi−b)2
如果一段区间长度为 len,删去其中恰好 k 个数后,剩余元素的总贡献为:
给定一个长度为 n 的整数序列 x1,x2,…,xn,以及两个整数参数 b 和 c。对于任意整数 v,定义其基准评分为 c⋅(v−b)2。
你需要将整个序列恰好分割成 m 个连续的非空子段,使得每个子段至少包含 k 个元素,且这些子段互不重叠并覆盖全部元素。在每一个子段中,你必须丢弃恰好 k 个元素,保留剩下的元素。设该子段在丢弃前的长度为 L(显然 L≥k),保留的元素集合为 S。该子段的收益计算公式为:
L2×v∈S∑c⋅(v−b)2对于每个子段,你可以自由选择丢弃哪 k 个元素,目的是使该子段的收益尽可能大。你的目标是确定一种划分方案,使得所有 m 个子段的总收益最大。输出这个最大总收益。
数据约束:
第一行包含五个整数 n,m,k,b,c,分别表示序列长度、分段数量、每段丢弃的元素个数以及评分参数。第二行包含 n 个整数 x1,x2,…,xn,表示给定的序列。
输出一个整数,表示最大可能的总收益。
输入
3 1 1 0 1
1 2 3
输出
117
说明
序列 x = [1, 2, 3],参数 b=0,c=1,每个元素的基准评分 w_i = c · (x_i - b)^2 分别为 1, 4, 9。 由于只有一段 n=1,必须丢弃 k=1 个评分最小的元素(即 1),保留的评分和为 4 + 9 = 13。段长 L=3,该段收益为 L^2 × 13 = 9 × 13 = 117。故最大总收益为 117。
输入
4 2 1 0 1
1 1 1 1
输出
18
说明
所有元素均为 1,b=0,c=1,故评分全为 1。需分成 n=2 段,每段丢弃 k=1 个 1。对于长度为 L 的段,丢弃一个 1 后保留 L-1 个 1,收益为 L^2 × (L-1)。 总长度 4 分成两段,长度组合可为 (1,3)、(2,2) 或 (3,1)。(1,3) 收益为 1^2 × 0 + 3^2 × 2 = 18;(2,2) 收益为 2^2 × 1 + 2^2 × 1 = 8;(3,1) 收益为 18。最大收益为 18。
输入
2 1 1 1 -1
0 2
输出
-4
说明
参数 b=1,c=-1,序列 x=[0,2]。评分 w_1 = -1 · (0-1)^2 = -1,w_2 = -1 · (2-1)^2 = -1。 只有一段 n=1,必须丢弃一个最小的评分(即 -1),保留的评分和为 -2 - (-1) = -1。段长 L=2,收益为 2^2 × (-1) = -4。
输入
5 2 2 0 1
1 3 2 4 5
输出
225
说明
参数 b=0,c=1,评分 w = [1,9,4,16,25]。需分成 n=2 段,每段丢弃 k=2 个最小评分。 分段方案一:[1,2] 和 [3,5]。前者长度 2 丢弃全部,收益 0;后者包含元素 2,4,5,评分总和 45,丢弃最小的两个 4 和 16,保留 25,段长 L=3,收益 3^2 × 25 = 225。总分 225。 分段方案二:[1,3] 和 [4,5]。段 [1,3] 评分 1,9,4,总和 14,丢弃 1,4 保留 9,收益 3^2 × 9 = 81;段 [4,5] 长度 2 丢弃全部,收益 0。总分 81。 因此最大总收益为 225。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.