/*************************************************************************
> File Name: 108.cpp
> Author: Toy
> Mail: ycsgldy@163.com
> Created Time: 2013年05月24日 星期五 12时56分02秒
************************************************************************/
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstring>
#include <cstdlib>
#include <climits>
#include <sstream>
#include <fstream>
#include <cstdio>
#include <string>
#include <vector>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <set>
using namespace std;
const int INF = 0x7fffffff;
int Case, A[1010][1010];
int max1D ( int a[] ) {
int ans = -1e9;
int s = 0;
for ( int i = 0; i < Case; ++i ) {
if ( s >= 0 ) s += a[i];
else s = a[i];
ans = max ( s, ans );
}
return ans;
}
int max2D ( int a[][1010] ) {
int ans = -1e9;
int s[Case];
for ( int i = 0; i < Case; ++i ) {
memset ( s, 0, sizeof ( s ) );
for ( int j = i; j < Case; ++j ) {
for ( int k = 0; k < Case; ++k )
s[k] += a[j][k];
ans = max ( ans, max1D ( s ) );
}
}
return ans;
}
int main ( ) {
while ( scanf ( "%d", &Case ) == 1 ) {
for ( int i = 0; i < Case; ++i )
for ( int j = 0; j < Case; ++j )
scanf ( "%d", &A[i][j] );
printf ( "%d\n", max2D ( A ) );
}
return 0;
}
UVa 108 - Maximum Sum (最大子矩阵)
最新推荐文章于 2019-07-21 16:52:45 发布