有一组硬币,数量不超过100枚。每个硬币的面值范围是1~500.
对这组硬币进行分组,使得每组硬币,其面值总和的差距最小。
def min_diff(n, nums):
nums = sorted(nums)
res1 = []
res1_sum = 0
sum_val = sum(nums)
half_val = sum_val // 2
if nums[-1]>500 or nums[0]<1:
return -1
for i in range(n-1, -1, -1):
tmp = res1_sum + nums[i]
if tmp <= half_val:
res1.append(nums[i])
res1_sum = tmp
return sum_val - 2 * res1_sum
if __name__ == '__main__':
# nums = [2, 5, 8, 10, 10, 1000]
nums = [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 8, 8, 8, 8, 10, 20, 20]
nums = [1, 3, 5, 2, 3]
n = len(nums)
print(min_diff(n, nums))
不知道对不对,记录一下了