给定一个NxN矩阵mat和矩阵的阶数n,已知矩阵由正整数和负整数组成,请返回元素总和最大的子矩阵的元素之和。要求元素绝对值小于等于100000,尽量高效且矩阵阶数小于等于200。
测试样例:
[[1,2,-3],[3,4,-5],[-5,-6,-7]],3
返回:10
class SubMatrix {
public:
int sumOfSubMatrix(vector<vector<int> > mat, int n) {
// write code here
int res = INT_MIN;
for(int i=0; i<n; i++){
vector<int> tmp = mat[i];
res = max(res, helper(tmp));
for(int j = i+1; j<n; j++){
for(int k=0; k<n; k++) tmp[k] += mat[j][k];
res = max(res, helper(tmp));
}
}
return res;
}
int helper(vector<int> &vec){
int tmp = vec[0];
int res = 0;
for(int i=1; i<vec.size(); i++){
tmp = max(tmp+vec[i], vec[i]);
res = max(res, tmp);
}
return res;
}
};