|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目如下 ,就是题解中的 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[M][M];
- int s[M], minpre[M];
- int main() {
- int n, m, x;
- scanf("%d%d", &n, &m);
- For(i, 1, n) {
- For(j, 1, m) {
- scanf("%d", &x);
- sum[i][j] = sum[i - 1][j] + x; //维护列的前缀和
- }
- }
- int ans = 0;
- For(i, 1, n) {
- For(j, i, n) { // 这里是枚举矩阵的上下界
- int t = 0;
- s[0] = 0;
- For(k, 1, m) {
- s[k] = s[k - 1] + sum[j][k] - sum[i - 1][k]; //维护行的前缀和
- minpre[k] = min(minpre[k - 1], s[k]); // 这一句不知道什么意思
- }
- int len = 0;
- For(k, 1, m) {
- while (len < k && s[k] > minpre[k - len - 1]) len++; // 还有这个,k 枚举的是右界,k-len-1 就是左界
- }
- ans = max(ans, (j - i + 1) * len); // 更新矩阵最大面积
- }
- }
- printf("%d", ans);
- return 0;
- }
复制代码
输入输出 : |
|