给定数组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
如何改进方法?请帮忙。
答案 0 :(得分:1)
首先,您可以总结所有值。让我们称之为MAX。 然后检查是否有一个元素保存超过MAX / 2,让我们调用这个元素BIG。 如果不满足此条件,那么答案应该只是MAX / 2。 如果满足此条件,那么我们必须从BIG和MAX中减去1,直到BIG小于或等于MAX / 2。