我的想法是这样: 设矩阵是m*n的,用a[i1][i2][j]表示第j列中从第i1行累加到第i2行的和(如果中间遇到0元素,那么最后的和直接置为0),这里1 <=i1 <=i2 <=m,1 <=j <=n。 对于每个a[i1][i2][1~n]序列(这个序列就是一个数组,设为B[1~n])执行下面的操作: 1 扫描B[1~n]这个数组 2 for i = 1 : n if B[i]!= 0 total += B[i++]; else { if(total > sum) sum = total; total = 0; } end 对所有m*(m+1)/2个)个序列都执行上面的数组操作即可找到最大的子矩阵。