int maxConsSum2(const vector<int> &arr) { if (arr.empty()) return 0; int sum = 0; for (int i = 0; i < arr.size(); ++i) sum += arr[i]; int maxs = maxConsSum(arr); int mins = minConsSum(arr); return max(maxs, sum - mins); }
int maxRectSum(vector<vector<int> > &matrix) { int maxSum = 0; if (matrix.empty()) return 0; for (int i = 0; i < matrix.size(); i ++) { vector<int> subMatrix(matrix[0].size(), 0); for (int j = i; j < matrix.size(); ++ j) { for (int k = 0; k < matrix[0].size(); ++ k) { subMatrix[k] += matrix[j][k]; } } maxSum = max(maxSum, maxConsSum(subMatrix)); } return maxSum; }