测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A31974. 黑白方块

填空题 较难

题目描述

黑白方块

题目描述

小杨有一个n行m列的网格图,其中每个格子要么是白色,要么是黑色。

对于网格图中的一个子矩形,小杨认为它是平衡的当且仅当其中黑色格子与白色格子数量相同。

小杨想知道最大的平衡子矩形包含了多少个格子。

输入格式

第一行包含两个正整数n,m,含义如题面所示。

之后n行,每行一个长度为m的01串,代表网格图第i行格子的颜色,如果为 0,则对应格子为白色,否则为黑色。

输出格式

输出一个整数,代表最大的平衡子矩形包含格子的数量,如果不存在则输出。

样例1

输入

4 5
00000
01111
00011
00011

输出

16

样例解释

对于样例1,假设(i,j) 代表第i行第j列,最大的平衡子矩形的四个顶点分别为(1,2),(1,5),(4,2),(4,5)。

数据范围

对于全部数据,保证有 1≤n,m≤10 。

参考答案

N = 55 w = [[0] * N for _ in range(N)] def check(xa, ya, xb, yb): a = [0, 0] for i in range(xa, xb + 1): for j in range(ya, yb + 1): a[w[i][j]] += 1 return a[0] == a[1] def main(): n, m = map(int, input().split()) for i in range(1, n + 1): s = input() for j in range(1, m + 1): w[i][j] = int(s[j - 1]) ans = 0 for i in range(1, n + 1): for j in range(1, m + 1): for ii in range(i, n + 1): for jj in range(j, m + 1): if check(i, j, ii, jj): ans = max(ans, (ii - i + 1) * (jj - j + 1)) print(ans) if __name__ == "__main__": main()
上一题 下一题