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]; }