有一个包含正数和负数的二维数组。一个子矩阵是指在该二维数组里,任意相邻的下标是1*1或更大的子数组。一个子矩阵的和是指该子矩阵中所有元素的和。本题中,把具有最大和的子矩阵称为最大子矩阵。找到最大子矩阵和矩阵元素和,C++的代码实现
时间: 2024-06-06 18:07:18 浏览: 72
MaxSum.rar_最大子矩阵
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, m;
scanf("%d %d", &n, &m);
int a[n][m];
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
scanf("%d", &a[i][j]);
}
}
int max_sum = a[0][0], max_i = 0, max_j = 0;
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
int sum = 0;
for(int p=i; p<n; p++){
for(int q=j; q<m; q++){
sum += a[p][q];
if(sum > max_sum){
max_sum = sum;
max_i = i;
max_j = j;
}
}
}
}
}
printf("Maximum submatrix sum: %d\n", max_sum);
printf("Maximum submatrix:\n");
for(int i=max_i; i<n; i++){
for(int j=max_j; j<m; j++){
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
阅读全文