|
这题需要动动脑子,可以找到O(NM)的算法。 但是表述很麻烦,还是看代码吧。。
#include <stdio.h> #include <string.h>
int N, M; int end[1024], sum[1024]; char mat[1024][1024];
int main() { int i, j, k, v, ans;
while (scanf("%d%d", &N, &M) != EOF) { memset(end, 0, sizeof(end)); memset(sum, 0, sizeof(sum)); for (i = 0; i < N; i++) scanf("%s", mat[i]); ans = 0; for (i = 0; i < N; i++) { for (j = 0; j < M; j++) { if (mat[i][j] == '1' && end[j] <= i) { for (k = i; k < N && mat[k][j] == '1'; k++) sum[k]++; end[j] = k; } } for (j = i; j < N && sum[j]; j++) { v = (j - i + 1) * sum[j]; if (v > ans) ans = v; } } printf("%d\n", ans); }
return 0; }
|