static int schedule(int m,int[] array) {
int[][] dp = new int[array.length + 1][m + 1];
for (int i = 1; i <= array.length; i++)
dp[i][0] = Integer.MAX_VALUE;
for (int i = 1; i <= array.length; i++) {
for (int j = 1; j <= m; j++) {
int min = Integer.MAX_VALUE;
int t = 0;
for (int k = 1; k <= i; k++) {
t += array[i - k];
if (t >= min) break;
min = Math.min(min, Math.max(dp[i - k][j - 1], t));
}
dp[i][j] = min;
}
}
return dp[array.length][m];
}