【发布时间】:2014-10-27 15:14:40
【问题描述】:
我已经被这个问题困扰了很长一段时间。它要求将数字的平方根从 1 到 n 分成两组 A 和 B,以使 Set A 中的数字之和尽可能接近 Set B 中的数字之和。 我已经很努力了,但我无法想出一个算法。
【问题讨论】:
标签: algorithm numbers discrete-mathematics
我已经被这个问题困扰了很长一段时间。它要求将数字的平方根从 1 到 n 分成两组 A 和 B,以使 Set A 中的数字之和尽可能接近 Set B 中的数字之和。 我已经很努力了,但我无法想出一个算法。
【问题讨论】:
标签: algorithm numbers discrete-mathematics
想象n 非递减顺序的数字(实数),即
你的情况。 sqr(n) 将始终大于 sqr(n - 1)。
反转列表。
创建 4 个变量,setA、setB 为空数组,sumA、sumB 为初始化为 0 的数字。
从反向列表中选择第一个值并将其附加到setA 并添加到sumA。
遍历剩余的反向列表,并分别追加和添加到集合和总和,其总和小于当前值另一个。
从我的头顶:
f(divide_in_2_groups) <- (list)
setA, setB = []
sumA, sumB = 0
append setA, list[0]
sumA <- sumA + list[0]
for i <- 1 to n
//if sumA >= list[i]
if sumA >= sumB
append setB, list[i]
sumB <- sumB + list[i]
else
append setA, list[i]
sumA <- sumA + list[i]
return (setA, sumA, setB, sumB, abs(sumA - sumB))
HTH
【讨论】: