#include <iostream>
using namespace std;
const int size = 5;
int max_sub_array(const int *a, int n, int m);
int max_matrix(const int (*a)[size], int row, int col, int subsize);
int main()
{
const int array[][5] = {
{1, 2, 0, 3, 4},
{2, 3, 4, 5, 1},
{1, 1, 5, 3, 0}
};
const int (*pa)[5] = array;
int res = max_matrix(pa, 3, 5, 2);
cout << "Max sum of the sub matric is : " << res << endl;
return 0;
}
int max_sub_array(const int *a, int n, int m)
{
static int sum =0;
int cur_sum = 0;
for(int i = n - 1; i >= (n - m); --i)
{
cur_sum += a[i];
}
if(sum < cur_sum)
{
sum = cur_sum;
}
if(n <= m)
{
int res = 0;
res = sum;
sum = 0;
return res;
}
else
{
return max_sub_array(a, n - 1, m);
}
}
int max_matrix(const int (*a)[size], int row, int col, int subsize)
{
int *col_array = new int[row];
for(size_t ix = 0; ix < row; ++ix)
{
col_array[ix] = 0;
}
for(size_t x = 0; x < row; ++x) //找每行最大子数组和
{
int res = max_sub_array(a[x], col , subsize);
col_array[x] = res;
}
int max_subarray = max_sub_array(col_array, row, subsize);
delete [] col_array;
return max_subarray;
}