题目的意思就是给你一个n×n的矩阵,问其中哪个小矩阵和最大。
其实就是最大子序列的变形。
把每一行元素加起来当做一个元素来算。
比如只有第一行,然后在第一列计算最大子序列,
然后把每行前两个加起来当做一个元素,在按列求最大子序列,然后把所有行的的情况都搜一遍,取到最大值。。
#include<iostream>
using namespace std;
const int N = 100 + 5;
int n;
int num[N][N];
int main () {
cin >> n;
for (int i = 0 ; i < n;i++) {
for (int j = 0 ; j < n ;j++ ) {
cin >> num[i][j];
}
}
int sum;
int m = 0;
int temp;
for (int i = 0 ; i < n ;i++) {
for (int l = 0 ; l < n ;l++) {
sum = 0;
for (int j = 0 ; j < n ;j++) {
temp = 0;
for (int k = i ; k <= l ;k++) {
temp += num[j][k];
}
sum += temp;
if (sum < 0 ) {
sum = 0;
}
if (sum > m) {
m = sum;
}
}
}
}
cout << m <<endl;
}