给定一个由非负整数和整数m组成的数组,可以将数组拆分为m个非空连续子数组。编写算法以最小化这些m个子阵列中的最大总和。
输入:
nums = [7,2,5,10,8]
m = 2
输出:
18
解析:
将nums拆分成子数组的方式有4种.
最好的选择是拆分成 [7,2,5] 和 [10,8],
两个子数组中的最大的和只有 18.
如果n是数组的长度,则假定满足以下约束:
1 ≤ n ≤ 1000
1 ≤ m ≤ min(50, n)
输入测试数据 (每行一个参数)
思路:由前面拆分到m-1个子串得到
public class Solution {
/**
* @param nums: a list of integers
* @param m: an integer
* @return: return a integer
*/
public int splitArray(int[] nums, int m) {
int[][] dp=new int[m][nums.length];
dp[0][0]=nums[0];
for(int i=1;i=0;k--){
dp[i][j]=Math.min(dp[i][j],Math.max(dp[i-1][k],sum));
sum+=nums[k];
}
}
}
return dp[m-1][nums.length-1];
}
}