#include<stdio.h>
#include <stdlib.h>
#include <string.h>
int s[112345];
int main()
{
int n,m,i,low,high,mid,num,sum,z;
while(~scanf("%d %d", &n, &m)){
low = 0;
high = 0;
for(i = 0;i < n;i++){
scanf("%d", &s[i]);
if(low<s[i]) low = s[i];
high +=s[i];
}
while(low <= high){
mid = (low+high)/2;
sum = 0;
num =1;
for(i = 0;i < n;i++){
if(sum+s[i] <=mid){
sum+=s[i];
}else {
sum = s[i];
num++;
}
}
if(num > m){
low = mid+1;
}else {
high =mid-1;
z = mid;
}
}
printf("%d\n", z);
}
return 0;
}
POJ 3273 Monthly Expense 最大值最小 二分法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.