https://leetcode.com/problems/split-array-largest-sum/#/description
state(状态):dp[i][j] - 在 nums 中,选出前 i 个元素,分成 j 份时,在这 j 个 subarray 的 sum 中最大的 sum
function(递推公式):dp[i][j] = Min(x){ Max(dp[x][j - 1], sum[i] - sum[x])}, 0 <= x < i
initialize(初始化): dp[0][0] = 0; dp[i][j] = Integer.MAX_VALUE
answer: dp[nums.length][m]
public class Solution {
public int splitArray(int[] nums, int m) {
int[] sum = new int[nums.length + 1];
int[][] dp = new int[nums.length + 1][m + 1];
sum[0] = 0;
for (int i = 0; i < nums.length; i++) {
sum[i + 1] = sum[i] + nums[i];
}
for (int i = 0; i <= nums.length; i++) {
for (int j = 0; j <= m; j++) {
dp[i][j] = Integer.MAX_VALUE;
}
}
dp[0][0] = 0;
for (int i = 1; i <= nums.length; i++) {
for (int j = 1; j <= m; j++) {
for (int x = 0; x < i; x++) {
int value = Math.max(dp[x][j - 1], sum[i] - sum[x]);
dp[i][j] = Math.min(dp[i][j], value);
}
}
}
return dp[nums.length][m];
}
}
这个方法应该还有简化的可能。。。