https://www.acmicpc.net/problem/18430
18430번: 무기 공학
첫째 줄에는 길동이가 가지고 있는 나무 재료의 세로, 가로 크기를 의미하는 두 자연수 N, M이 주어진다. (1 ≤ N, M ≤ 5) 다음 N개의 줄에 걸쳐서, 매 줄마다 나무 재료의 각 위치의 강도를 나타내
www.acmicpc.net
n, m = map(int,input().split())
arr = [list(map(int,input().split())) for _ in range(n)]
bum = [(0,-1,1,0),(-1,0,0,-1),(-1,0,0,1),(0,1,1,0)] # 부메랑 4가지 모양
visited = [[0] * m for _ in range(n)]
ans = 0
def dfs(i,j,strength):
global ans
if j == m: # 행을 다 돌았을 때 다음 열로 고.
i += 1
j = 0
if i == n:
ans = max(ans,strength) # 최댓값 갱신
return
if visited[i][j] == 0:
for k in range(4): # 4가지 모양 가능한지 모두 탐색
a, b, c, d = bum[k]
x1,y1,x2,y2 = i+a, j+b, i+c, j+d
if 0<= x1 <n and 0<= y1 <m and 0<= x2 <n and 0<= y2 <m and visited[x1][y1] == 0 and visited[x2][y2] == 0:
visited[x1][y1] = visited[x2][y2] = visited[i][j] = 1
dfs(i,j+1,strength + arr[i][j]*2 + arr[x1][y1] + arr[x2][y2]) # 백트래킹
visited[x1][y1] = visited[x2][y2] = visited[i][j] = 0
dfs(i,j+1,strength)
dfs(0,0,0)
print(ans)
'백준' 카테고리의 다른 글
백준 1520. 내리막 길 (0) | 2023.11.01 |
---|---|
백준 4485. 녹색 옷 입은 애가 젤다지? (0) | 2023.10.30 |
백준 1826. 연료 채우기 (0) | 2023.10.25 |
백준 17825. 주사위 윷놀이 (0) | 2023.10.24 |
백준 1781. 컵라면 (0) | 2023.10.23 |