728x90
https://www.acmicpc.net/problem/14500
14500번: 테트로미노
폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변
www.acmicpc.net
1. 시작 지점으로부터 상하좌우로 3번 이동하면 모든 테트로미노 모양이 나옵니다. (ㅗ 제외)
- 빈도배열 사용
#pragma warning(disable:4996)
#include <stdio.h>
#include <algorithm>
using namespace std;
int n, m, ans;
int tetromino[510][510];
int freq[510][510];
int dire[2][4] = {{ -1, 1, 0, 0 }, { 0, 0, -1, 1 }};
void search(int x, int y, int cnt, int cost)
{
if (cnt == 4)
{
ans = ans < cost ? cost : ans;
return;
}
for (int i = 0; i < 4; i++)
{
if (x + dire[0][i] > n || y + dire[1][i] > m) continue;
if (x + dire[0][i] < 1 || y + dire[1][i] < 1) continue;
if (freq[x + dire[0][i]][y + dire[1][i]]) continue;
freq[x + dire[0][i]][y + dire[1][i]] = 1;
search(x + dire[0][i], y + dire[1][i], cnt + 1, cost + tetromino[x + dire[0][i]][y + dire[1][i]]);
freq[x + dire[0][i]][y + dire[1][i]] = 0;
}
}
// ㅗ 모양
void cat()
{
int s = 0;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
s = tetromino[i][j];
// 상
if (i - 1 >= 1 && j + 1 <= m && j - 1 >= 1)
{
s += tetromino[i - 1][j];
s += tetromino[i][j + 1];
s += tetromino[i][j - 1];
ans = ans < s ? s : ans;
}
s = tetromino[i][j];
// 하
if (i + 1 <= n && j + 1 <= m && j - 1 >= 1)
{
s += tetromino[i + 1][j];
s += tetromino[i][j + 1];
s += tetromino[i][j - 1];
ans = ans < s ? s : ans;
}
s = tetromino[i][j];
// 좌
if (i + 1 <= n && i - 1 >= 1 && j - 1 >= 1)
{
s += tetromino[i + 1][j];
s += tetromino[i - 1][j];
s += tetromino[i][j - 1];
ans = ans < s ? s : ans;
}
s = tetromino[i][j];
// 우
if (i + 1 <= n && i - 1 >= 1 && j + 1 <= m)
{
s += tetromino[i + 1][j];
s += tetromino[i - 1][j];
s += tetromino[i][j + 1];
ans = ans < s ? s : ans;
}
}
}
}
int main()
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
scanf("%d", &tetromino[i][j]);
cat();
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
freq[i][j] = 1;
search(i, j, 1, tetromino[i][j]);
freq[i][j] = 0;
}
}
printf("%d", ans);
return 0;
}
728x90
'알고리즘' 카테고리의 다른 글
Python - 치즈 (2636) BFS (0) | 2023.06.03 |
---|---|
Python - 거짓말 (1043) (0) | 2023.05.30 |
C++ - DNA 조합 (2217) 백트래킹, 문자열 (0) | 2023.05.23 |
C++ - 모자이크(2539) 이분 탐색 (1) | 2023.05.20 |
C++ - 빙산 (2573) DFS (0) | 2023.05.18 |