#include <cstdio>
#include <cstdlib>
using namespace std;
void solve();
bool check(int);
int n, m, k, sum, maxbook;
int num[500];
int main() {
while(scanf("%d", &n) != EOF){
for(int i = 0; i < n; i++){
sum = 0;
maxbook = 0;
scanf("%d %d", &m, &k);
for(int j = 0; j < m; j++){
scanf("%d", &num[j]);
sum += num[j];
if(num[j] > maxbook){
maxbook = num[j];
}
}
solve();
}
}
return 0;
}
void solve(){
int l = maxbook, v = sum;
int ans;
while(l <= v){
//printf("l: %d, v: %d\n", l, v);
int mid = (l+v)/2;
if(check(mid)){
ans = mid;
v = mid-1;
}else{
l = mid+1;
}
}
printf("%d\n", ans);
}
bool check(int mid){
int left = k-1;
int cursum = 0;
for(int i = 0; i < m; i++){
if(cursum + num[i] > mid){
if(left == 0)
return false;
left--;
cursum = num[i];
}else{
cursum += num[i];
}
}
return true;
}
题目1502:最大值最小化
最新推荐文章于 2021-01-28 15:53:01 发布