这个是一维数组的升级版,他的做法是先处理每一行,然后再对每一列进行处理,处理时按“两列”“三列”。。。“C列”处理,最后就可以找到最大值。
行为r,列为c,数组为随机生成的
package test;
import java.util.Random;
import java.util.Scanner;
public class test01 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner in=new Scanner(System.in);
System.out.println("输入要随机生成的行数!");
int r=in.nextInt();
System.out.println("输入要随机生成的列数!");
int c=in.nextInt();
int a[][]=new int[r][c];
int i,j,k,p,q;
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
Random random=new Random();
a[i][j]=random.nextInt(11);
a[i][j]-=1;
System.out.print(a[i][j]);
System.out.print(" ");
}
System.out.println();
}
int sum=0,n;
int maxn=0;
//先计算单个行的最大值
//接着单列每2个组合到一起的最大值
//接着单列每3个组合到一起的最大值
//...一直到单列每r个组合到一起的值
//找出他们的最大值。
for(n=0;n<r;n++)
{
for(i=0;i<r-n;i++)
{
sum=0;
for(j=0;j<c;j++)
{
for(k=i;k<=i+n;k++)
{
System.out.println(k+","+j);
sum=sum+a[k][j];
}
System.out.println(sum+" ");
if(sum<0)
{
sum=0;
}
if(maxn<sum)
{
maxn=sum;
}
}
}
}
System.out.println(maxn);
}
}