#include <stdio.h>
#include <string.h>
int m, n, h[1001], num[1001];
char matrix[1001];
int main() {
//freopen("in.txt", "r", stdin);
while(scanf("%d %d",&m, &n) != EOF) {
getchar();
memset(h,0,sizeof(int)*n);
int max = 0;
for(int i=1; i<=m; i++) {
gets(matrix);
memset(num,0,sizeof(int)*(i+1));
for(int j=0; j<n; j++) {
if(matrix[j] == '1')
h[j]++;
else
h[j] = 0;
num[h[j]]++;
for(int k=1; k< h[j];k++) {
num[k]++;
}
}
for(int k=1; k<=i; k++) {
if(max < num[k] * k) max = num[k] * k;
}
}
printf("%d\n",max);
}
return 0;
}

本文介绍了一个通过读取输入的二维矩阵并计算其中由'1'构成的最大矩形区域面积的算法。该算法首先初始化矩阵的高度数组,并利用逐行扫描的方式更新高度数组,同时维护一个计数数组来记录每种高度出现的次数。通过这种方式,可以有效地计算出当前扫描到的所有可能的最大矩形面积。
2423

被折叠的 条评论
为什么被折叠?



