划分数组

把一个有n的非负元素的数组划分为k部分(各个部分的元素在原数组中必须是连续的,就是{i, i+1,...,j}),使得k个部分各个部分元素的和中的最大值最小,返回这个值。
比如把{10, 20, 30, 40, 50, 60, 70, 80, 90}划分为3部分,那么这种划分是一种方案:
第一部分:10 20 30 40 50
第二部分:60 70
第三部分:80 90

作者: dreamhunter_lan   发布时间: 2011-06-05

二分这个和,然后划分,大概n*log(m)的,m为所有数据的和。

以lz的例子为例,10 - 90,和为450,分为3部分,每部分最少要150,最多不超过450,在150-450中二分,比如算300,然后以300为最大和,对原数组进行分组,可以分为2组,说明300太大了,算225......设k为二分的结果,什么时候以k为最大和,只能分为3组,而以k-1为最大和,需要分为4组,就说明找到了合适的k了。

作者: litaoye   发布时间: 2011-06-05

二分和,然后从数组第一个元素开始加,超过就认为是下一组,这样得到的组数若>k,则增加和,否则减小和

作者: Andimeo   发布时间: 2011-06-05