它来自一个编程问题。
问题如下:
将给出一个数字数组以及我们必须与之相除的数字 k。我们必须从该数组中选择元素,使得这些元素的总和可以被 k 整除。这些元素的总和应尽可能大。
输入:
在第一行 n,表示元素的数量。
在下一行给出了 n 个数字。
在下一行 k 给出了我们必须划分的。
输出:
通过从该数组中选择元素来尽可能大的总和 st 总和可被 k 整除。
样本输入:
5
1 6 2 9 5
8
样本输出:
16
请注意,16 可以通过不止一种数字组合获得,但我们在这里只关心最大和。
我提出的解决方案:
我遍历数组并在数组 b 中为给定的输入数组维护累积和,例如:
b=[1 7 9 18 23]
并将数组 b 中的数字乘以 k 并将其存储到
c=[1 7 1 2 7]
现在 c 中具有相同值的数字,即索引 0 和索引 2;索引 1 和索引 4。现在我得到了所有解决方案,答案是
max(b[2]-b[0],b[4]-b[1])
并且在一种情况下,三个索引在 c 中具有相同的值,即如果
c=[1 2 3 1 1 2]
答案是
max(b[4]-b[0],b[5]-b[1])
基本上用最右边的数字减去最左边的数字。
我的解决方案仅适用于存在连续元素 st 元素之和可被 k 整除的情况。期待正确解决方案的描述