O(n4)解法
vector<vector<int>> CalculateMap(vector<vector<int>> mat)
{
vector<vector<int>> map(mat.size(),vector<int>(mat.front().size(),0));
for (int i = 0; i < mat.size(); i++)
{
for (int j = 0; j < mat.front().size(); j++)
{
if (i==0&&j==0)
{
map[i][j]=mat[i][j];
}
else if (i==0)
{
map[i][j]=map[i][j-1]+mat[i][j];
}
else if (j==0)
{
map[i][j]=map[i-1][j]+mat[i][j];
}
else
{
map[i][j]=map[i-1][j]+map[i][j-1]-map[i-1][j-1]+mat[i][j];
}
}
}
return map;
}
int CalculateSum(vector<vector<int>> mat,int i,int j,int k ,int w,vector<vector<int>> map)
{
int sum;
if (i==0&&k==0)
{
sum=map[j][w];
}
else if (i==0)
{
sum=map[j][w]-map[j][k];
}else if (k==0)
{
sum=map[j][w]-map[i][w];
}
else
{
sum=map[j][w]-map[i-1][w]-map[j][k-1]+map[i-1][k-1] ;
}
;
return sum;
}
int sumOfSubMatrix(vector<vector<int> > mat, int n)
{
int MaxSum=mat.front().front();
vector<vector<int>> map;
map=CalculateMap(mat);
for (int i = 0; i < n; i++)
{
for (int j = i; j < n; j++)
{
for (int k = 0; k < n; k++)
{
for (int w = k; w < n; w++)
{
if (CalculateSum(mat,i,j,k,w,map)>MaxSum)
{
MaxSum=CalculateSum(mat,i,j,k,w,map);
}
}
}
}
}
return MaxSum;
}
原文:http://www.cnblogs.com/YTYMblog/p/6420521.html