求一个NET算术算法,要求在N个数字中,对二个或多个数字做任意组合,使每个组合的值大于99且与99尽量相近,从而产生最多符合条件的组合。
例如有数字:30,70,55,60 四个数字,则我们可以直观的看出,30+70组合,55与60组合是最佳组合,产生了两组符合条件(值大于等于99)的组合。其他组合方式则只能产生一组。
但当有N个数字的时候,例如20个数值,怎么处理呢~?
先说个想法,把N数字从小到大排序,然后最大的加上最小的跟99比较,如果小于99, 就加第二小的
如果大于或等于99,就算一个组合,然后就倒数第二大的加小的,在比较,依此类推
只是个想法,还没写程序。
背包问题
二楼的方法是可行的。
优化的方法用:
双向二分查找,后向两边缩放查找。
O(nlogn)
是每个组合都尽量靠近99为优先还是组合数多为优先?
求最优解,可以考虑遗传算法