/************************************************************************/
/*第35题 最大子矩阵 */
/************************************************************************/
//
//下面的算法只是返回了最大值
/*
#include<iostream>
using namespace std;
int get_min_line( int list[] , int col_num ) {
int i;
int max = -9999;
int t = 0;
for( i = 0 ; i < col_num ; i ++ ) {
if( t > 0 ) {
t = t + list[ i ];
}
else {
t = list[ i ];
}
if( t > max ) {
max = t;
}
}
return max;
}
int get_min( int table[][5] , int row_num , int col_num ) {
int i , j , k;
int *list;
int max = -9999;
list = ( int * ) malloc ( sizeof( int ) * col_num );
for( i = 0 ; i < row_num ; i ++ ) {
int m;
for( m = 0 ; m < col_num ; m ++ ) {
list[ m ] = 0;
}
for( j = i ; j < row_num ; j ++ ) {
int t;
for( k = 0 ; k < col_num ; k ++ ) {
list[ k ] = list[ k ] + table[ j ][ k ];
}
t = get_min_line( list , col_num );
if( t > max ) {
max = t;
}
}
}
free( list );
return max;
}
int main() {
int table[ 5 ][ 5 ];
int i , j;
for( i = 0 ; i < 5 ; i ++ ) {
for( j = 0 ; j < 5 ; j ++ ) {
scanf( "%d" , &table[ i ][ j ] );
}
}
printf( "%d\n" , get_min( table , 5 , 5 ) );
return 0;
}
*/
/*
1 2 3 0 -4
-2 0 7 1 -3
20 -9 -7 8 5
3 -9 -9 0 0
-9 0 1 1 1
*/