原题链接:http://101.200.52.143/problem.php?pid=1134
算法标签:动态规划
代码:
#include <iostream>
#include <cmath>
using namespace std;
#define INT_MIN 0xc0c0c0c0
int n, m;
int matrix[509][509], colSum[509][509];
int main(){
cin >> n >> m;
for( int i=1; i<=n; i++ ){
for( int j=1; j<=m; j++ ){
cin >> matrix[i][j];
colSum[i][j] = colSum[i][j-1] + matrix[i][j];
}
}
int ans = INT_MIN;
for( int begin=1; begin<=m; begin++ ){ // 列: [begin, end]
for( int end=begin; end<=m; end++ ){
int res = INT_MIN;
int tmp = 0;
for( int i=1; i<=n; i++ ){
int sum = colSum[i][end] - colSum[i][begin-1];
tmp += sum;
res = max(res, tmp);
if(tmp < 0){
tmp = 0;
}
}
ans = max(ans, res);
}
}
cout << ans;
return 0;
}