
题解:
cpp
class Solution {
public:
/**
* @param matrix: the given matrix
* @return: the largest possible sum
*/
int maxSubmatrix(vector<vector<int>> &matrix) {
// write your code here
int m = matrix.size();
if (m <= 0) {
return 0;
}
int n = matrix[0].size();
if (n <= 0) {
return 0;
}
vector<vector<int>> prefix(m+1, vector<int>(n+1, 0));
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
prefix[i+1][j+1] = prefix[i][j+1] + prefix[i+1][j] - prefix[i][j] + matrix[i][j];
}
}
int result = INT_MIN;
for (int top = 0; top < m; ++top) {
for (int bottom = top; bottom < m; ++bottom) {
int min_sum = 0;
for (int i = 0; i < n; ++i) {
int tmp = prefix[bottom+1][i+1] - prefix[top][i+1];
result = max(result, tmp-min_sum);
min_sum = min(min_sum, tmp);
}
}
}
return result;
}
};