#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define MAX_N 100010
#define INF 1000000001
int a[MAX_N];
int N, M;
bool C(int d){ //如果d可以让a分成5组
int s[MAX_N];
memset(s, 0, sizeof(s));
int cnt = 1;
for(int i = 0;i < N; i++){
if(a[i] > d) return false;
s[cnt] += a[i];
if(s[cnt] > d){
s[++cnt] = a[i];
}
}
return cnt == M;
}
void solve(){
int lb = -1, ub = INF;
while(ub - lb > 1){
int mid = (lb + ub) / 2;
if(C(mid)) ub = mid;
else lb = mid;
}
printf("%d\n", ub);
}
int main(){
while(scanf("%d%d", &N, &M) != EOF){
for(int i = 0;i < N; i++)
scanf("%d", &a[i]);
solve();
}
return 0;
}
poj 3273 Monthly Expense
最新推荐文章于 2023-09-01 22:00:12 发布
