/*
简单二分
*/
#include
#include
#include
using namespace std;
const int maxn = 100000 + 10;
int data[maxn] , n, k;
bool check(int x){
int now = 0;
for(int i = 1 ; i<= k; ++ i){
int sum = data[++ now];
if(sum > x) return false;
while(sum + data[now + 1] <= x && now < n){
sum += data[++now];
}
if(n == now) return true;
}
return false;
}
int main(){
//freopen("in","r",stdin);
int cas;
scanf("%d",&cas);
while(cas --){
scanf("%d%d",&n,&k);
int sum = 0;
for(int i = 1 ;i <= n; ++ i){
scanf("%d",&data[i]);
sum += data[i];
}
int l = 0, r = sum, ans = sum;
while(l <= r){
int mid = (l + r) >> 1;
if(check(mid)){
r = mid - 1;
ans = mid;
}
else l = mid + 1;
}
printf("%d\n",ans);
}
}
九度1502
最新推荐文章于 2016-08-17 20:07:27 发布