1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int m,n; 7 cout << "请输入二维数组的行和列:"; 8 cin >> n>> m; 9 //定义一个可变长二维数组; 10 int** a; 11 a = new int*[n]; 12 for (int i = 0; i <= n; i++) 13 { 14 a[i] = new int[m]; 15 } 16 //定义一个存储二维数组所有子数组的可变长一维数组; 17 int *sum=new int [m*(m+1)*n*(n+1)/4]; 18 for (int i = 0; i < m*(m + 1)*n*(n + 1) / 4; i++) 19 { 20 sum[i] = 0; 21 } 22 int t = 0; 23 cout << "输入数组的值:" << endl; 24 for (int i = 0; i < n; i++) 25 { 26 for (int j = 0; j < m; j++) 27 { 28 cin >> a[i][j]; 29 } 30 } 31 //用枚举法将所有子数组的和求出,放到sum数组里; 32 for (int i = 0; i < n; i++) 33 { 34 for (int j = 0; j < m; j++) 35 { 36 for (int p = i; p < n; p++) 37 { 38 for (int q = j; q < m; q++) 39 { 40 for (int y = i; y <= p; y++) 41 { 42 for (int x = j; x <= q; x++) 43 { 44 //求子数组和; 45 sum[t] = sum[t] + a[y][x]; 46 } 47 } 48 t++; 49 } 50 } 51 } 52 } 53 //求最大子数组; 54 for (int i = 0; i < m*(m + 1)*n*(n + 1) / 4; i++) 55 { 56 if (sum[0] < sum[i]) 57 { 58 sum[0] = sum[i]; 59 } 60 } 61 cout<< "最大子数组的和为:"<<sum[0] << endl; 62 system("pause"); 63 return 0; 64 }
测试截图:
小组成员:
原文:https://www.cnblogs.com/huangrb/p/9826077.html