题目描述
给 n 个正整数 a_1 … a_n, 将 n 个数排成一列后分割成 m 段, 每一段的分数为这段内所有数的和, 该次分割的分数被记为 m 段分数的最大值.
问所有分割方案中分割分数的最小值是多少?
思路
二分搜索.
首先定义一个函数 check, 返回布尔型, 用来检查能不能用一个数 x 来将数组分割成 m 份, 使得每份的和不大于 x.
显然如果 x 足够大, 是可以的, 而 x 如果太小则不行, 该题就是要求最小的可行的 x.
代码
#include <stdio.h>
long a[100000];
int n, m;
long max(long a, long b) {
return (a > b) ? a : b;
}
long min(long a, long b