点击打开链接
// main.cpp
// test
//
// Created by 吴有堃 on 2017/9/11.
// Copyright © 2017年 吴有堃. All rights reserved.
//
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <cstring>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <queue>
#include <vector>
#define LL long long
#define inf 0x3f3f3f3f
#define mod 1e9+7
using namespace std;
const int maxn=1e5+5;
int cost[maxn]={0};
int main()
{
int left=0,right=0,mid=0,sum=0,cnt=0,i=0,N=0,M=0;
scanf("%d %d",&N,&M);
for(i=0;i<N;i++){
scanf("%d",&cost[i]);
left=max(left,cost[i]);
right+=cost[i];
}
while (left<=right) {
mid=(left+right)/2;
sum=0,cnt=0;
for(i=0;i<N;i++){
if(sum+cost[i]>mid){
cnt+=1;
sum=cost[i];
}
else{
sum+=cost[i];//贪心,尽量往右加;
}
}
if(cnt<M){//区间比较少;left区间最多,right区间最少
right=mid-1;
}
else{
left=mid+1;
}
}
printf("%d\n",left);
return 0;
}