您的位置:首页 > 其它

最大和子矩阵

2016-07-21 13:30 197 查看


题目描述

有一个正整数和负整数组成的NxN矩阵,请编写代码找出元素总和最大的子矩阵。请尝试使用一个高效算法。

给定一个int矩阵mat和矩阵的阶数n,请返回元素总和最大的子矩阵的元素之和。保证元素绝对值小于等于100000,且矩阵阶数小于等于200。
测试样例:
[[1,2,-3],[3,4,-5],[-5,-6,-7]],3


返回:10

class SubMatrix
{
public:
int helper(vector<int>A,int n) //求最大连续子和
{
int maxsum=A[0];
int last=A[0];
for(int i=1;i<n;i++)
{
if(last>0)
{
last=last+A[i];
}
else
{
last=A[i];
}
if(last>maxsum)
maxsum=last;
}
return maxsum;
}
int sumOfSubMatrix(vector<vector<int> > mat, int n)
{
// write code here
// 选取子和矩阵从第i行开始的最大子和矩阵,任一子矩阵都会有一个开始行
int maxval=(-1)<<31;
for(int i=0;i<n;i++)
{
vector<int> temp=mat[i];
maxval=max(maxval,helper(temp,n));
for(int j=i+1;j<n;j++) //从第i行开始寻找最大子和矩阵
{
for(int k=0;k<n;k++)
temp[k]+=mat[j][k];
maxval=max(maxval,helper(temp,n));
}
}
return maxval;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: