Skip to content

Commit e39bbd0

Browse files
s3197
1 parent f566a37 commit e39bbd0

File tree

1 file changed

+56
-0
lines changed
  • solutions/3100-3199/3197.find-the-minimum-area-to-cover-all-ones-ii

1 file changed

+56
-0
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
public class Solution {
2+
private const int INF = 1 << 30;
3+
private int[][] grid;
4+
5+
public int MinimumSum(int[][] grid) {
6+
this.grid = grid;
7+
int m = grid.Length;
8+
int n = grid[0].Length;
9+
int ans = m * n;
10+
11+
for (int i1 = 0; i1 < m - 1; i1++) {
12+
for (int i2 = i1 + 1; i2 < m - 1; i2++) {
13+
ans = Math.Min(
14+
ans, F(0, 0, i1, n - 1) + F(i1 + 1, 0, i2, n - 1) + F(i2 + 1, 0, m - 1, n - 1));
15+
}
16+
}
17+
18+
for (int j1 = 0; j1 < n - 1; j1++) {
19+
for (int j2 = j1 + 1; j2 < n - 1; j2++) {
20+
ans = Math.Min(
21+
ans, F(0, 0, m - 1, j1) + F(0, j1 + 1, m - 1, j2) + F(0, j2 + 1, m - 1, n - 1));
22+
}
23+
}
24+
25+
for (int i = 0; i < m - 1; i++) {
26+
for (int j = 0; j < n - 1; j++) {
27+
ans = Math.Min(
28+
ans, F(0, 0, i, j) + F(0, j + 1, i, n - 1) + F(i + 1, 0, m - 1, n - 1));
29+
ans = Math.Min(
30+
ans, F(0, 0, i, n - 1) + F(i + 1, 0, m - 1, j) + F(i + 1, j + 1, m - 1, n - 1));
31+
32+
ans = Math.Min(
33+
ans, F(0, 0, i, j) + F(i + 1, 0, m - 1, j) + F(0, j + 1, m - 1, n - 1));
34+
ans = Math.Min(
35+
ans, F(0, 0, m - 1, j) + F(0, j + 1, i, n - 1) + F(i + 1, j + 1, m - 1, n - 1));
36+
}
37+
}
38+
return ans;
39+
}
40+
41+
private int F(int i1, int j1, int i2, int j2) {
42+
int x1 = INF, y1 = INF;
43+
int x2 = -INF, y2 = -INF;
44+
for (int i = i1; i <= i2; i++) {
45+
for (int j = j1; j <= j2; j++) {
46+
if (grid[i][j] == 1) {
47+
x1 = Math.Min(x1, i);
48+
y1 = Math.Min(y1, j);
49+
x2 = Math.Max(x2, i);
50+
y2 = Math.Max(y2, j);
51+
}
52+
}
53+
}
54+
return (x2 - x1 + 1) * (y2 - y1 + 1);
55+
}
56+
}

0 commit comments

Comments
 (0)