枚举+DP
枚举任意两行之间的矩阵,求出每列的和,转化为一维数组求最大子段和。
代码:
#include <iostream>
#include <cstdlib>
#include <string>
#include <algorithm>
using namespace std;
int main() {
int n;
int p;
int a[150][150];
int sum[150];
int temp;
int max_result =-1000;
cin>> n;
for(int i = 0; i< n; i++){
for(int j = 0; j < n; j++){
cin>> p;
a[i][j] =p;
}
}
for(int i = 0; i< n; i++) {
memset(sum, 0, sizeof(sum));
for(int j = i; j < n; j++){
for(int k= 0; k < n; k++) {
sum[k] += a[j][k];
if(k == 0) {
temp = sum[k];
} else {
if(temp > 0){
temp =temp + sum[k];
} else {
temp =sum[k];
}
}
max_result = max(max_result,temp);
}
}
}
cout<< max_result<< endl;
// system("pause");
return 0;
}