dp = arr[i];
27 else28 dp += arr[i];29 if (dp < min)30 min = dp;31 sum += arr[i];32 }33 max2 = sum - min;//数组全部元素和减去最小子数组34 return max1>max2 ? max1 : max2;//三目运算符;如果max1>max2,将max1的值返回,否则返回max235 }36 int maxSubMatrix(int n, int m, int array[M][N])37 { 38 int i, j, h, max, sum = -100000;39 int b[100];40 for (i = 0; i<n; i++)41 { 42 memset(b, 0, sizeof(b)); //初始化b[] 43 for (j = i; j<n; j++) //把第i行到第j行相加,对每一次相加求出最大值 44 { 45 for (h = 0; h<m; h++)46 { 47 b[h] += array[j][h]; //二维数组压缩成一维数组,然后求最大子序列和 48 }49 max = maxSubArray(b, h);50 51 if (max>sum)52 sum = max;53 }54 }55 return sum;56 }57 int main()58 { 59 int arr[M][N];60 cout << "随机二维数组为:" << endl;61 srand(time(0));62 for (int i = 0; i < M; i++)63 { 64 for (int j = 0; j < N; j++)65 { 66 arr[i][j] = rand() % 50 - 25;67 cout << arr[i][j] << " ";68 }69 cout << endl;70 }71 cout <<"最大子数组的和:"<< maxSubMatrix(M, N, arr) << endl;72 return 0;73 }将二位数组压成一个一位数组,然后利用一位数组求最大字数组方式求