[GESP202406 四级] 黑白方块

GESP编程共123题,本题是整站第1416题,已经有人完成了本题,加油!

题目描述

小杨有一个 n 行 m 列的网格图,其中每个格子要么是白色,要么是黑色。对于网格图中的一个子矩形,小杨认为它是平衡的当且仅当其中黑色格子与白色格子数量相同。小杨想知道最大的平衡子矩形包含了多少个格子。

输入格式

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

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

输出格式

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

输入输出样例

输入 #1

4 5
00000
01111
00011
00011

输出 #1

16

说明/提示

【样例解释】

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

【数据范围】

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

别灰心,再试一次!

真题解析

【考纲知识点】

C++二维数组和多维数组的基本应用

【解题思路】

首先解决 “如何判断一个矩阵 a是一个平衡矩阵”这个问题:枚举矩阵中的每一个元素,用两个计数器a[0]、a[1]分别记录0和1的数量,如果最终a[0]==a[1],那么就是平衡矩阵,复杂度是O(n^2)。

然后解决“如何枚举一个矩阵中的所有子矩阵”这个问题:对于任意一个子矩阵,它都有一个起始行、一个终止行、一个起始列和一个终止列,我们可以用4个for循环来分别枚举它们,这样就应该把每个子矩阵确定下来,复杂度是O(n^4)。

如此一来,我们便可以用O(n^4)的复杂度枚举每一个子矩阵,然后再花O(n^2)的复杂度判断是否是平衡矩阵,总体时间复杂度为O(n^6)。

参考程序

本站题目仅供学习,GESP版权归CCF所有,如有侵权请联系删除。站长陈老师QQ及微信:208234。