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