问码农们一个算法问题。
所在版块:心情闲聊 发贴时间:2019-05-23 12:43

用户信息
复制本帖HTML代码
高亮: 今天贴 X 昨天贴 X 前天贴 X 
中一小朋友,competitive programming / binary search 内容中的一个练习题。简化一下问题描述: 

一个连续数列,比如 1 2 3 4 5 6 7 8 9 ... m
分成 n 个相连的 group,每种分法,取最大的那个 group sum。
问,怎么分,才有最小的最大 group sum。

比如 m = 9, 1 2 3 4 5 6 7 8 9
n = 3 分成 3 组
A) 分成 (1 2) (3 4) (5 6 7 8 9) -> max sum: 5+6+7+8+9=35
B) 分成 (1 2 3) (4 5 6) (7 8 9) -> max sum: 7+8+9=24
C) 分成 (1 2 3 4 5) (6 7) (8 9) -> max sum: 8+9=17
D) ......

答案是 17,不管怎么分,最小的 max sum 是 17,C 的那种分法。

test case,取不同的 m, n, 并且 0 < m, n < 1000。
不光看答案,也看运行时间。

暴力测试是可以的,但是运行时间超时 (AWS 上编译的 C++ 代码)。
我觉得这样的题目给中一孩子太难了。而且也没弄懂怎么在上面应用 binary search。
还是想得太复杂?


该帖荣获当日十大第4,奖励楼主12分以及18华新币,时间:2019-05-23 22:00:01。
.
欢迎来到华新中文网,踊跃发帖是支持我们的最好方法!

 相关帖子 我要回复↙ ↗回到正文
问码农们一个算法问题。 3idiots   (1030 bytes , 1471reads )
并不是很暴力,因为有重复子问题,是动态规划 id_rsa   (212 bytes , 28reads )
对的。 3idiots   (0 bytes , 14reads )
目测楼主可以考虑用空间来换取时间 功夫熊猫   (193 bytes , 15reads )
可能我描述有误,不是自然数列。 3idiots   (32 bytes , 18reads )
那玩脱了 功夫熊猫   (0 bytes , 13reads )
迷幻原题来了,大家欣赏一下。 3idiots   (2782 bytes , 18reads )
还是你们厉害,我的手艺不行了,惭愧。 3idiots   (0 bytes , 11reads )
一粘贴代码全部gg,上个图 id_rsa   (58 bytes , 34reads )
[ThumbsUp][ThumbsUp][ThumbsUp],就欣赏实干的! zhbhope   (0 bytes , 27reads )
这题就是递归搜索嘛 id_rsa   (777 bytes , 21reads )
这是 python 吧?不太会,但是也能看。 3idiots   (84 bytes , 16reads )
没什么时间,说下基本思路吧 heathcliff   (287 bytes , 19reads )
一句“之后所以的分发”,略去了C(m,n)的复杂度。 zhbhope   (28 bytes , 21reads )
你可以再仔细想想 heathcliff   (5 bytes , 18reads )
我能想到的binary search是 zhbhope   (372 bytes , 18reads )
多谢啦。这么说我就懂了。 3idiots   (73 bytes , 12reads )
两种解法 yueli   (126 bytes , 24reads )
说的真简介明了,solution space 二分法。就是!复杂度是n*log(数组的和) zhbhope   (0 bytes , 21reads )
没错,这题就是用binary search,dp也可以的。但time complexity是binary search好的 github   (0 bytes , 29reads )
这个题目没看懂 wineywei   (309 bytes , 22reads )
原题是个充满了各种诡异精灵名字的 problem solving 小故事。。。 3idiots   (184 bytes , 13reads )
好像不是最大两个 cy1024   (48 bytes , 16reads )
划分型动态规划 小p友   (11 bytes , 26reads )