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]; } }
这个方法应该还有简化的可能。。。