leetcode 410 动态规划版本,dp[i][j]表示到i为止,分割为j组的最小最大和。 class Solution { public:     int splitArray(vector<int>& nums, int m) {         int n = nums.size();         vector<vector<long>> dp(n+1, vector<long>(m+1, ~(1<<31)));         vector<long> sums(n+1, 0);         // nums.push_front(0);         for(int i=1; i<=n; ++i) sums[i] = sums[i-1] + nums[i-1];         for(int i=0; i<=n; ++i) dp[i][1] = sums[i]; // 到i为止,只分一组。         for(int i=1; i<=n; ++i){             for(int j=1; j<=m; ++j){                 for(int k=0; k<=i; ++k){ // 枚举到i为止所有切割点。                     dp[i][j] = min(dp[i][j], max(dp[k][j-1], sums[i]-sums[k]));                 }             }         }         return dp[n][m];     } };
点赞 1

相关推荐

02-15 22:29
门头沟学院 Java
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客网
牛客企业服务