最大和子矩阵
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;
}
};
相关文章推荐
- POJ 3259 Wormholes 【判断是否存在负环】
- java实现查找数组中重复次数最多的字符串
- 养成领袖风格与习惯
- MAVEN项目标准目录结构
- AngularJS之input指令
- qt下QWT编译 配置和使用
- 关于苹果审核,应用需支持IPV6的解决办法
- Jdbc-基本连接
- Android Studio NDK
- iOS 常用小技巧大杂烩(下)
- Android中scrollview滑动监测
- Linux学习之CentOS--虚拟机下的CentOS如何上网----NAT方法
- iOS UITextField 输入字数限制的实现
- hdu 1711Number Sequence
- Binary Representation
- #2# 使用\连接
- 基础拾忆------委托详解
- [字符编码]Invalid byte 1 of 1-byte UTF-8 sequence终极解决方案
- hdu1495 非常可乐--BFS
- 解决线上问题办法