把一堆数字分成两堆,使两堆的和尽可能接近

把一堆数字分成两堆

比较好的方法是使用DP,把所有集合内元素能达到的部分和标记出来

例如有数字

{ 1, 3, 4, 5 }

则可以达到的部分和从小到大为:

1=1
3=3
4=4
5=5
6=1+5
7=3+4
8=3+5
9=4+5
10=1+4+5

...


然后只要从总和的一半开始,往少的方向寻找第一个存在的部分和就可以了,也就是最大的部分和

 

设总和为sum,最大部分和为partsum,

则两堆数最小的差值为 ( sum - partsum ) - partsum

 

参考代码如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值