12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- #include<bits/stdc++.h>
- using namespace std;
- int maxSumLinear(const vector<int> &a) {
- int n = a.size() - 1;
- int sum = 0;
- int b = 0;
- for (int i = 0; i <= n; i++) {
- if (b > 0)
- b += a[i];
- else
- b = a[i];
- if (b > sum) sum = b;
- }
- return sum;
- }
- int maxSum2(const vector<vector<int>> &a) {
- int sum = 0;
- int m = a.size(), n = a[0].size();
- vector<int> b(n, 0);
- for (int i = 0; i < m; i++) {
- for (int k = 0; k < n; k++) b[k] = 0;
- for (int j = i; j < m; j++) {
- for (int k = 0; k < n; k++) b[k] += a[j][k];
- int max = maxSumLinear(b);
- if (max > sum) sum = max;
- }
- }
- return sum;
- }
- int main() {
- for (int n; cin >> n;) {
- vector<vector<int>> a(n, vector<int>(n, 0));
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- cin >> a[i][j];
- cout << maxSum2(a) << endl;
- }
- return 0;
- }
|