Solutions of Maximum submatrix sum - MarisaOJ: Marisa Online Judge

Solutions of Maximum submatrix sum

Select solution language

Write solution here.


User Avatar YugiHacker    Created at    10 likes

Giả sử mảng con có tổng lớn nhất được giới hạn bởi $2$ hàng $u \le v$ và cột $i, j$. Nếu ta duyệt $2$ vòng for thử $u$ và $v$, ta cần chọn ra cột $i$ và $j$ sao cho tổng bảng con được giới hạn bởi hàng $u, v$ và cột $i, j$ là lớn nhất Gọi $b_i$ là tổng các số trong cột $i$ và được giới hạn bởi hai hàng $u, v$ này. $b_i = a[u][i] + a[u+1][i] + ... + a[v-1][i] + a[v][i]$, thì bài toán tìm mảng con tốt nhất giới hạn bởi $2$ hàng $u, v$ sẽ trở thành bài toán tìm đoạn con có tổng lớn nhất trên mảng $1$ chiều: [Mảng con có tổng lớn nhất](https://marisaoj.com/problem/60) Code mẫu: ```cpp #include<bits/stdc++.h> #define maxn 502 using namespace std; long long ans; int n, m, a[maxn][maxn]; long long b[maxn]; int main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin >> n >> m; for (int i=1; i<=n; i++) for (int j=1; j<=m; j++) cin >> a[i][j]; for (int u=1; u<=n; u++) { for (int i=1; i<=m; i++) b[i] = 0; for (int v=u; v<=n; v++) { long long s = 0; for (int i=1; i<=m; i++) { b[i] += a[v][i]; s += b[i]; if (s < 0) s = 0; ans = max(ans, s); } } } cout << ans; } ``` Chi tiết cách làm có thể xem tại đây: https://youtu.be/fYwhI-Onp1k