Guest User

Untitled

a guest
Feb 18th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.98 KB | None | 0 0
  1. class Solution {
  2. public:
  3. int splitArray(vector<int>& nums, int m) {
  4. int len = nums.size(), sum = 0;
  5. //dp[i][j] represents minimum largest sum by dividing first i characters into j subarrays
  6. //dp[i][j] = min(max(dp[k][j - 1], sum(k + 1, i)))
  7. //base case: dp[i][1] = presum[i] - 0(since we need to get dp[k][j - 1] when calculate dp[i][j]), dp[i][0] = INT_MAX, dp[0][i] = INT_MAX;
  8. vector<vector<int>> dp(len + 1, vector<int>(m + 1, INT_MAX));
  9. vector<int> preSums(1, 0);
  10. for(auto& num : nums){sum += num;preSums.push_back(sum);};
  11. for(int i = 0; i < len; ++i)
  12. {
  13. dp[i + 1][1] = preSums[i + 1] - preSums[0];
  14. for(int j = 2; j <= min(i + 1, m); ++j)
  15. {
  16. for(int k = i; k >= j - 1; --k)
  17. {
  18. dp[i + 1][j] = min(max(dp[k][j - 1], preSums[i + 1] - preSums[k]), dp[i + 1][j]);
  19. }
  20. }
  21. }
  22. return dp[len][m];
  23. }
  24. };
Add Comment
Please, Sign In to add comment