/**
*参考书:挑战程序设计竞赛_算法与数据结构_第二版 P106
*problem:传送带送来了n个货物,依次装到k辆卡车(最大运载量p一致)。
*限制:n, k <=10000;//更改了原题的规模
*input: 第一行输入 n k,
接下来n行,输入重量a[i]
*output: 最大运载量p
*example:
in:
5 3
8
1
7
3
9
out:
10
*/
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int n,k;
int a[10000];
int f(int p){
int i = 0;
for(int j = 0;j<k;j++){
int s=0;
while(s+a[i]<=p){
s+=a[i];
i++;
if(i == n) return n;
}
}
return i;
}
int er_find(int a[],int n,int k)
{
int left=0,right=10000*10000;
int mid;
while(right>left+1){
mid = (left+right)/2;
int val = f(mid);//获取当p == mid时,能装多少货物
if(val>=n) //val大,说明p偏大 则缩小
right = mid;
else
left = mid;
}
return right;
}
int main()
{
cin>>n>>k;
for(int i=0; i<n; i++)
scanf("%d", &a[i]);
int ans = er_find(a,n,k);
cout<<ans<<endl;
return 0;
}