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

A23725. 排兵布阵

填空题 较难

题目描述

排兵布阵

题目描述

作为将军,你自然需要合理地排兵布阵。地图可以视为n 行 m列的网格,适合排兵的网格以 1 标注,不适合排兵的网格以 0 标注。现在你需要在地图上选择一个矩形区域排兵,这个矩形区域内不能包含不适合排兵的网格。请问可选择的矩形区域最多能包含多少网格?

输入格式

第一行,两个正整数n,m ,分别表示地图网格的行数与列数。

接下来n 行,每行m 个整数ai,1,ai,2,...,ai,m ,表示各行中的网格是否适合排兵。

输出格式

一行,一个整数,表示适合排兵的矩形区域包含的最大网格数。

样例

输入样例 1

4 3
0 1 1
1 0 1
0 1 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≤n,m≤12,0≤ai,j≤1  。

参考答案

#include <algorithm> #include <cstdio> using namespace std; const int N = 15; int n, m; int a[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", &a[i][j]); for (int u = 1; u <= n; u++) for (int l = 1; l <= m; l++) for (int d = u; d <= n; d++) { int chk = 1; for (int r = l; r <= m; r++) { for (int x = u; x <= d; x++) chk &= a[x][r]; if (!chk) break; ans = max(ans, (r - l + 1) * (d - u + 1)); } } printf("%d\n", ans); return 0; }
上一题 下一题