Pagini recente » Teoria jocurilor | Cod sursa (job #2534165) | Cod sursa (job #2772563) | Cod sursa (job #174278) | Cod sursa (job #3287117)
import java.io.*;
import java.util.Scanner;
public class Main {
public static int checkCapacity(int[] v, int totalCapacity) {
int k = 1;
int currentCapacity = v[1];
for (int i = 2; i < v.length; i++) {
if (currentCapacity + v[i] > totalCapacity) {
k++;
currentCapacity = v[i];
} else {
currentCapacity += v[i];
}
}
return k;
}
public static int binarySearch(int[] v, int low, int high, int k) {
int mid, res = -1;
while (low <= high) {
mid = (low + high) >>> 1;
int nrTransport = checkCapacity(v, mid);
if (nrTransport <= k) {
res = mid;
high = mid - 1;
} else { // k < nrTransport
low = mid + 1;
}
}
return res;
}
public static void main(String[] args) throws FileNotFoundException {
try (Scanner scanner = new Scanner(new FileInputStream("transport.in"));
PrintWriter pw = new PrintWriter(new FileOutputStream("transport.out"))) {
int N = scanner.nextInt();
int k = scanner.nextInt();
int[] v = new int[N+1];
int min = Integer.MIN_VALUE;
for (int i = 1; i <= N; i++) {
v[i] = scanner.nextInt();
if (v[i] >= min) {
min = v[i];
}
}
int max = 16000 * N;
pw.println(binarySearch(v, min, max, k));
}
}
}