#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
int a[100005];
int n , m;
int high, low = 0;
bool check(int flag)
{
int sum = 0 ;
int cnt = 1;//第一段
for(int i = 1 ; i <= n ; i ++)
{
sum += a[i];
if(sum > flag)
{
cnt ++;
sum = a[i];//每一段的开头
}
}
if(cnt > m)
return true;
else
return false;
}
int main(void)
{
cin>>n>>m;
for(int i = 1 ; i <= n ; i ++)
{
cin>>a[i];
low = max(low, a[i]);
high += a[i];
}
while(low < high)
{
int mid = (low + high) / 2;
if(check(mid))
{
low = mid + 1;
}
else
{
high = mid;
}
}
cout<<low<<endl;
return 0;
}
二分(洛谷-P1182)
猜你喜欢
转载自blog.csdn.net/Zenith_Habitant/article/details/82747814
今日推荐
周排行