不解释,直接上代码
写循环把当前行与下一行叠加,然后用最大连续和求出此时的最大和

1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <iostream>
4 #include <string.h>
5 #define N 101
6 using namespace std;
7 int Maxsum(int n, int *a)
8 {
9 int sum = 0,b = 0;
10 for(int i=0; i<n; i++)
11 {
12 if( b > 0 )
13 b += a[i];
14 else
15 b = a[i];
16 if( b > sum )
17 sum = b;
18 }
19 return sum;
20 }
21 int main(void)
22 {
23 int n,mat[N][N];
24 int sum[N],max = 0;
25 cin >> n;
26 for(int i=0; i<n; i++)
27 for(int k=0; k<n; k++)
28 cin >> mat[i][k];
29 for(int i=0; i<n; i++)
30 {
31 memset(sum,0,sizeof(sum));
32 for(int k=i; k<n; k++)
33 {
34 for(int j=0; j<n; j++)
35 sum[j] += mat[k][j];
36 int tempsum = Maxsum(n,sum);
37 if( tempsum > max )
38 max = tempsum;
39 }
40 }
41 cout << max << endl;
42 return 0;
43 }