public class main2 {
public static boolean func(long mid, int[] v, int n, int m) {
int ans = 0, i, tmp = 0;
for (i = 0; i < n; i++) {
if ((tmp + v[i]) >= mid) {
ans++;
tmp = v[i];
} else
tmp += v[i];
}
if (ans == 0)
ans = 1;
if (ans >= (n - m))
return true;
else
return false;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
long sum = 0, l = Long.MAX_VALUE, r, mid;
int n, m;
n = in.nextInt();
m = in.nextInt();
int[] v = new int[n];
for (int i = 0; i < n; i++) {
v[i] = in.nextInt();
sum += v[i];
l = Math.min(l, v[i]);
}
r = sum / (n - m);
while (l <= r) {
mid = (l + r) / 2;
if (func(mid, v, n, m))
l = mid + 1;
else
r = mid - 1;
}
System.out.println(r);
}
}
贴个代码 嘴巴说不清楚怕 有好的思路记得@一下我