问题描述
Lazy有N个礼物需要打成M个包裹,邮寄给M个人,这些礼物虽然很便宜,但是很重。Lazy希望每个人得到的礼物的编号都是连续的。为了避免支付高昂的超重费,他还希望让包裹的最大重量最小。
输入格式
一行两个整数N和M。
一行N个整数,表示N个礼物的重量。
输出格式
一个整数,表示最小的最大重量。
样例输入
3 2
1 1 2
样例输出
2
一、思路分析
首先第一行的输入N为礼物的个数,M为可以打包的包裹数,打包的包裹数量不能超过最大值M,第二行的输入为礼物的顺序和重量。我们要获得最大打包的重量,这个重量肯定在最大礼物重量和礼物总重量之间。采用二分法来找到中间的一个值。
二、使用步骤
1.引入库
代码如下:
#include <iostream>
#include <math.h>
using namespace std;
const int N = 1e5;
int sum[N]={
0};//当前礼物的重量
int s[N]={
0};//前N个礼物的总重量
int n;//礼物个数
int m;//包裹个数
int Max;//获取礼物的最大重量
bool check(int mid)