G.cpp 991 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int maxSumLinear(const vector<int> &a) {
  4. int n = a.size() - 1;
  5. int sum = 0;
  6. int b = 0;
  7. for (int i = 0; i <= n; i++) {
  8. if (b > 0)
  9. b += a[i];
  10. else
  11. b = a[i];
  12. if (b > sum) sum = b;
  13. }
  14. return sum;
  15. }
  16. int maxSum2(const vector<vector<int>> &a) {
  17. int sum = 0;
  18. int m = a.size(), n = a[0].size();
  19. vector<int> b(n, 0);
  20. for (int i = 0; i < m; i++) {
  21. for (int k = 0; k < n; k++) b[k] = 0;
  22. for (int j = i; j < m; j++) {
  23. for (int k = 0; k < n; k++) b[k] += a[j][k];
  24. int max = maxSumLinear(b);
  25. if (max > sum) sum = max;
  26. }
  27. }
  28. return sum;
  29. }
  30. int main() {
  31. for (int n; cin >> n;) {
  32. vector<vector<int>> a(n, vector<int>(n, 0));
  33. for (int i = 0; i < n; i++)
  34. for (int j = 0; j < n; j++)
  35. cin >> a[i][j];
  36. cout << maxSum2(a) << endl;
  37. }
  38. return 0;
  39. }