for (int i = 1; i < n; ++i) { for (int j = 1; j <= min(m-1, i); ++j) { for (int k = 0; k < i; ++k) { f[i][j] = min(f[i][j], max(f[k][j-1], vs[i]-vs[k])); } } } int res = INT_MAX; for (int i = m-1; i < n; ++i) { res = min(res, max(f[i][m-1], vs[n]-vs[i])); } return res;
// @lc code=start class Solution { public: int splitArray(vector<int>& nums, int m) { int n = nums.size(); vector<vector<int>> f(n, vector<int>(m, INT_MAX)); vector<int> vs(n+1, 0); for (int i = 0; i < n; ++i) { vs[i+1] = vs[i] + nums[i]; } f[0][0] = 0; for (int i = 1; i < n; ++i) { for (int j = 1; j <= min(m-1, i); ++j) { for (int k = 0; k < i; ++k) { f[i][j] = min(f[i][j], max(f[k][j-1], vs[i]-vs[k])); } } } int res = INT_MAX; for (int i = m-1; i < n; ++i) { res = min(res, max(f[i][m-1], vs[n]-vs[i])); } return res; } }; // @lc code=end