首页 新闻 会员 周边 捐助

求一.NET算术算法.

0
悬赏园豆:50 [已关闭问题]

求一个NET算术算法,要求在N个数字中,对二个或多个数字做任意组合,使每个组合的值大于99且与99尽量相近,从而产生最多符合条件的组合。

例如有数字:30,70,55,60 四个数字,则我们可以直观的看出,30+70组合,55与60组合是最佳组合,产生了两组符合条件(值大于等于99)的组合。其他组合方式则只能产生一组。

但当有N个数字的时候,例如20个数值,怎么处理呢~?

问题补充: 举个例子,有如下数值: 11,14,26,28,35,48,56,70,75,105,208,258 要求组合出最多组大于或等于99的组合,每个数字只能使用一次.
soleds的主页 soleds | 初学一级 | 园豆:55
提问于:2010-08-11 09:02
< >
分享
其他回答(4)
0

先说个想法,把N数字从小到大排序,然后最大的加上最小的跟99比较,如果小于99, 就加第二小的

如果大于或等于99,就算一个组合,然后就倒数第二大的加小的,在比较,依此类推

只是个想法,还没写程序。

Tiu | 园豆:211 (菜鸟二级) | 2010-08-11 09:27
11,14,26,28,35,48,56,70,75,105,208,258 像这个,按您的想法将会是75+26 但是其实可以:75+11+14
支持(0) 反对(0) soleds | 园豆:55 (初学一级) | 2010-08-11 10:00
@炸药3:但像你这样并不能得到最多的组合 , 当然我没看到能多个数组合,如果最大的加最小的不符合,再加上第二小的在比较
支持(0) 反对(0) Tiu | 园豆:211 (菜鸟二级) | 2010-08-11 10:10
有点复杂。。。。。
支持(0) 反对(0) soleds | 园豆:55 (初学一级) | 2010-08-11 10:24
ER,大概像你的想法一样实现,只不过,拿最大的和最小的比相加,大于或等于99则表示成立,否则拿最大的和第二个最小的相加。直到没有。 再把上面规则剩下的,一样取最大的,和最小的第一个加,这时候肯定不是满足的,再加第二小的,如果还不满足,再加第三小的,直到满足,如果加到最后一个倒数第二小的,还不满足,则表示剩下的全部相加也不匹配了。
支持(0) 反对(0) soleds | 园豆:55 (初学一级) | 2010-08-11 12:45
类似下面的结果: 匹配值:99 列表:10,89 匹配值:101 列表:17,84 匹配值:104 列表:24,80 匹配值:105 列表:30,75 匹配值:104 列表:35,69 匹配值:106 列表:45,61 匹配值:103 列表:46,57 匹配值:107 列表:51,56 匹配值:117 列表:51,12,17,37
支持(0) 反对(0) soleds | 园豆:55 (初学一级) | 2010-08-11 12:46
@炸药3:这样也不是很对,看最后一条,其实把12拿掉也能成立,12就算是多出来的。
支持(0) 反对(0) soleds | 园豆:55 (初学一级) | 2010-08-11 12:47
0

背包问题

cnhzlt | 园豆:399 (菜鸟二级) | 2010-08-11 09:31
背包是求:最大不能超过某个值,但要使每个每包里的重量尽可能的大。和我有点相反,我这里是要求符合条件的值是大于或等于某个值。只要能产生最多组合就行。
支持(0) 反对(0) soleds | 园豆:55 (初学一级) | 2010-08-11 10:11
嗯,是我搞错了
支持(0) 反对(0) cnhzlt | 园豆:399 (菜鸟二级) | 2010-08-11 13:44
0

二楼的方法是可行的。

优化的方法用:

双向二分查找,后向两边缩放查找。

 

O(nlogn)

Eric.wei | 园豆:205 (菜鸟二级) | 2010-08-11 09:51
谢谢。
支持(0) 反对(0) soleds | 园豆:55 (初学一级) | 2010-08-11 13:07
0

是每个组合都尽量靠近99为优先还是组合数多为优先?

eaglet | 园豆:17139 (专家六级) | 2010-08-11 11:56
组合数最多优先!
支持(0) 反对(0) soleds | 园豆:55 (初学一级) | 2010-08-11 12:41
但值必须大于或等于99
支持(0) 反对(0) soleds | 园豆:55 (初学一级) | 2010-08-11 12:41
我写了一个程序这样算了一下,得出这样的结果: 匹配值:106 列表:106 匹配值:105 列表:105 匹配值:104 列表:104 匹配值:99 列表:99 匹配值:114 列表:29,85 匹配值:120 列表:36,84 匹配值:117 列表:47,70 匹配值:117 列表:47,70 匹配值:105 列表:47,58 匹配值:105 列表:48,57 库存值:10,库存值:11,库存值:12,库存值:52,
支持(0) 反对(0) soleds | 园豆:55 (初学一级) | 2010-08-11 12:42
0

求最优解,可以考虑遗传算法

小彬 | 园豆:947 (小虾三级) | 2010-08-11 13:29
其中的条件“尽量与99接近”其实不需要,就是求组合数最多的解,比如 5个数组合起来之和为 500 了,那很有可能分成 2组,组合数比5个数组成一个要多
支持(0) 反对(0) 小彬 | 园豆:947 (小虾三级) | 2010-08-11 13:36
@小彬:因为有可能是三个值相组合也能达到效果,并不全是两个值组合,也有可能单个值本身满足条件的,然后每个数值只能使用一次。
支持(0) 反对(0) soleds | 园豆:55 (初学一级) | 2010-08-11 14:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册