柿子饼同学 发表于 2022-7-20 10:36:33

牛宫

题目如下 ,就是题解中的 minpre 数组的意思不理解,题解在下:



#include <bits/stdc++.h>
#define For(i, a, b) for (int i = (a); i <= (b); i++)
#define M 405
using namespace std;
int sum;
int s, minpre;
int main() {
    int n, m, x;
    scanf("%d%d", &n, &m);
    For(i, 1, n) {
      For(j, 1, m) {
            scanf("%d", &x);
            sum = sum + x;//维护列的前缀和
      }
    }
    int ans = 0;
    For(i, 1, n) {
      For(j, i, n) { // 这里是枚举矩阵的上下界
            int t = 0;
            s = 0;
            For(k, 1, m) {
                s = s + sum - sum;//维护行的前缀和
                minpre = min(minpre, s); // 这一句不知道什么意思
            }
            int len = 0;
            For(k, 1, m) {
                while (len < k && s > minpre) len++; // 还有这个,k 枚举的是右界,k-len-1 就是左界
            }
            ans = max(ans, (j - i + 1) * len); // 更新矩阵最大面积
      }
    }
    printf("%d", ans);
    return 0;
}
输入输出 : 3 2
4 0
-10 8
-2 -2
4

柿子饼同学 发表于 2022-7-21 10:57:31

懂了 , minpre 是前缀和中最小的那个
页: [1]
查看完整版本: 牛宫