【发布时间】:2012-11-10 19:17:01
【问题描述】:
它来自一个编程问题。
问题如下:
将给出一个数字数组以及我们必须与之相除的数字 k。 我们必须从该数组中选择元素,使得这些元素的总和可以被 k 整除。这些元素的总和应该尽可能大。
输入:
第一行n,表示元素个数。
在下一行给出 n 个数字。
在下一行,k 给出了我们必须除以它的值。
输出:
通过从该数组 s.t. 中选择元素来获得尽可能大的总和。 sum 可以被 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])
基本上用最右边的数字减去最左边的数字。
我的解决方案只有在有连续元素 s.t. 时才有效。元素之和可被 k 整除。期待正确解决方案的描述
【问题讨论】:
-
所有的数字都是整数吗?都是正面的?
-
@PaulR 是的,都是整数。
-
所有的整数都是正数吗?
-
@HighPerformanceMark 对 b[5] 的参考不适用于这种情况,我已经给出了,我只是假设另一个情况以进行澄清。我给了我没有提供 b 数组的 c 数组。
-
您是否必须从数组中选择连续的元素,或者是否会这样做?比如数组是
1 2 3 4 5,可以选择1 2 5吗?
标签: algorithm dynamic-programming