[SW 2117] 홈 방범 서비스
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V61LqAf8DFAWu&categoryId=AV5V61LqAf8DFAWu&categoryType=CODE
<코드>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int N, M, ans, cnt;
int map[22][22];
int dist(int x1, int y1, int x2, int y2) { return abs(x2 - x1) + abs(y2 - y1); }
void Init() {
scanf("%d %d", &N, &M);
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
scanf("%d", &map[i][j]);
}
}
ans = -1;
}
void sec(int x, int y, int range) {
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
if (dist(x, y, i, j) <= range && map[i][j]) {
cnt++;
}
}
}
}
int main() {
int T;
scanf("%d", &T);
for (int t = 1; t <= T; t++) {
Init();
for (int k = 1; k <= 2 * N + 1; k++) {
int run_cost = (k*k) + (k - 1)*(k - 1);
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
cnt = 0;
sec(i, j, k - 1);
if (cnt*M - run_cost >= 0) {
ans = max(ans, cnt);
}
}
}
}
printf("#%d %d\n", t, ans);
}
return 0;
}