B4005 [GESP202406 四级] 黑白方块
·
题目来源:
https://www.luogu.com.cn/problem/B4005
题目背景
对应的选择、判断题:试题 - GESP 202406 C++ 四级 - 洛谷有题
题目描述
小杨有一个 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。
这是一道枚举暴力题目(也可以用前缀和解决【别问我为什么不用前缀和】),主要思路就是去枚举矩形的四个顶点(需要注意下标的问题,有问题可以到评论里问,我会一一回答【看着就回】),在进行题目中累加,比较等操作。
看dai马:
题目代码:
#include<bits/stdc++.h>
using namespace std;
char a[15][15];
int ans=0;
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++){
for(int ii=1;ii<=m;ii++){
for(int jj=ii;jj<=m;jj++){
int b=0;
int h=0;
for(int x=i;x<=j;x++){
for(int y=ii;y<=jj;y++){
if(a[x][y]=='0') h++;
else b++;
}
}
if(h==b){
ans=max(ans,2*h);
}
}
}
}
}
cout<<ans;
return 0;
}
你学会了.......你肯定学会了。
更多推荐


所有评论(0)