区间dp:时间O(NNM)
class Solution {
public:
int splitArray(vector<int>& nums, int m) {
int N = nums.size();
int M = m;
long long dp[N+1][M+1];
dp[0][1] = 0;
// 右边界
for(int R=1; R<=N; R++){
dp[R][1] = dp[R-1][1] + nums[R-1];
// 前面分组
for(int k=2;k<=min(R,M);k++){
long long T = 0;
dp[R][k] = LLONG_MAX;
// 左边界
for(int L=R;L>0;L--){
T += nums[L-1];
dp[R][k] = min(dp[R][k],max(T,dp[L-1][k-1]));
}
}
}
return dp[N][M];
}
};