//子矩阵的最大累加和
public class SubMatrixSum{
//找出最大的子矩阵
public static int GetSubMatrixSum(int[][]matrix)
{
if(matrix==null||matrix.length==0||matrix[0].length==0)
{
return 0;
}
int sum=Integer.MIN_VALUE;
int cur=0;
int[]s=null ; //存储行累加的数组
for(int i=0;i<matrix.length;i++)
{
s=new int[matrix[0].length]; //列的长度,存储行累加的结果
for(int j=i;j<matrix.length;j++)
{
cur=0;
for(int k=0;k!=s.length;k++)
{
s[k]+=matrix[j][k];
cur+=s[k];
sum=Math.max(sum,cur);
cur=cur<0?0:cur;
}
}
}
return sum;
}
//打印矩阵
public static void PrintMatrix(int[][]matrix,int row,int colum)
{
int sum=0;
for(int i=0;i<=row;i++)
{
for(int j=0;j<=colum;j++)
{
System.out.print(matrix[i][j]+" ");
sum+=matrix[i][j];
}
System.out.println();
}
// System.out.println(sum);
}
public static void main(String[]args)
{
//System.out.println("Hello");
int[][]matrix={{-90,48,78},
{64,-40,64},
{-81,-7,66}};
int row=matrix.length-1;
int colum=matrix[0].length-1;
PrintMatrix(matrix,row,colum);
System.out.println(GetSubMatrixSum(matrix));
}
}
子矩阵的最大累加和
最新推荐文章于 2020-04-30 22:03:08 发布