如何最大化总积分?

时间:2017-02-20 18:50:29

标签: arrays algorithm math

给定数组A [1:N]。数组的每个元素都是非负数。 允许操作:选择数组的两个元素(两个元素的值必须至少为1)并将两个元素减少1.这样我们将获得1分。可以获得的最高分数是多少?

示例:

A[1:3] = 1 1 2
After step 1: 0 1 1
After step 2: 0 0 0
Maximum points = 2

蛮力方法:

total_points <- 0
while value of atleast two elements of A is greater than 0:
      subtract 1 from both
      total_points <- total_points + 1
return total_points

如何改进方法?请帮忙。

1 个答案:

答案 0 :(得分:1)

首先,您可以总结所有值。让我们称之为MAX。 然后检查是否有一个元素保存超过MAX / 2,让我们调用这个元素BIG。 如果不满足此条件,那么答案应该只是MAX / 2。 如果满足此条件,那么我们必须从BIG和MAX中减去1,直到BIG小于或等于MAX / 2。