【GESP2509四级】排兵布阵
4143:【GESP2509四级】排兵布阵时间限制: 1000 ms 内存限制: 65536 KB 提交数:538 通过数: 273 【题目描述】作为将军,你⾃然需要合理地排兵布阵。地图可以视为n⾏m列的⽹格,适合排兵的⽹格以 【输入】第⼀⾏,两个正整数n,m ,分别表⽰地图⽹格的⾏数与列数。 接下来n⾏,每⾏m个整数ai,1,ai,2,...,ai,m ,表⽰各⾏中的⽹格是否适合排兵。 【输出】⼀⾏,⼀个整数,表⽰适合排兵的矩形区域包含的最⼤⽹格数。 【输入样例】
4 3
0 1 1
1 0 1
0 1 1
1 1 1【输出样例】
4【提示】输入样例 2:
3 5
1 0 1 0 1
0 1 0 1 0
0 1 1 1 0输出样例 2:
3先要明白什么是矩形,1行是矩形,1列也是矩形,构成一个正方形的也是矩形,所以这道题就是找出里面的矩形,可以通过枚举来做,先查行,再查列,再查矩形, 4 3 上面的是输入下面的是查的时候的顺序,怎么查的,没有粘贴完,要看所有的可以自己在后面的代码改1-1 所以这个题目的难点就来了,你怎么写代码根据这些顺序来查,一两个for循环肯定是不行的,所以这道题的难点就是for循环
#include <algorithm>
#include <cstdio>
#include <iostream>
using namespace std;const int N = 15;
int n, m;
int g[N][N];
int ans;int main() {scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)scanf("%d", &g[i][j]);int maxarea = 0;for (int x1 = 1; x1 <= n; x1++)for (int y1 = 1; y1 <= m; y1++)for (int x2 = x1; x2 <= n; x2++) {for (int y2 = y1; y2 <= m; y2++) {bool v = 1;for(int i = x1; i <= x2; i++){for(int j = y1; j <= y2; j++){if(g[i][j]==0) v = 0;}}cout<<endl;if(v){int area = (x2-x1+1)*(y2-y1+1);maxarea = max(maxarea,area);}}}printf("%d\n", maxarea);return 0;
} |
