AcWing 126. 最大的和(二维前缀和)

我的梦境 提交于 2019-11-30 00:27:12

传送门

#include <bits/stdc++.h>

using namespace std;
const int MAXN = 110;
int sum[MAXN][MAXN], N;

int main() {
    //freopen("in", "r", stdin);
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> N;
    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= N; j++)
            cin >> sum[i][j];
    }
    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= N; j++)
            sum[i][j] += sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1];
    }
    int ans = -0x3f3f3f3f;
    for (int x1 = 1; x1 <= N; x1++) {
        for (int y1 = 1; y1 <= N; y1++) {
            for (int x2 = 1; x2 < x1; x2++) {
                for (int y2 = 1; y2 < y1; y2++)
                    ans = max(ans, sum[x1][y1] - sum[x2][y1] - sum[x1][y2] + sum[x2][y2]);
            }
        }
    }
    cout << ans << endl;
    return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!