瀏覽代碼

最大子矩阵

webturing 5 年之前
父節點
當前提交
236e373c8f
共有 1 個文件被更改,包括 48 次插入0 次删除
  1. 48 0
      G.cpp

+ 48 - 0
G.cpp

@@ -0,0 +1,48 @@
+#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;
+}
+
+