π‘ 쑰건
- κ½λ°μ
N * N
μ 격μ λͺ¨μμ΄κ³ , μ¨μμ (1, 1) ~ (N, N)
μ μ§μ μ€ νκ³³μ μ¬μ μ μλ€.
1λ
ν μνμ’μ°λ‘ κ½μμ΄ νΌμ³μ§λ€.
- μ΄λ€ μ¨μμ΄ κ½μ΄ ν λ€, λ€λ₯Έ κ½μ νΉμ κ½μ κ³Ό λΏκ² λ κ²½μ° κ½μ΄ λ λ€ μ£½μ΄λ²λ¦°λ€.
- μλ‘ λ€λ₯Έ μΈ μ¨μμ λͺ¨λ κ½μ΄ νΌκ²νλ©΄μ κ°μ₯ μΌ κ°κ²©μ νλ¨μ λμ¬νλ €κ³ νλ€.
μ§μκ° κ½μ μ¬μ μ μλ μ΅μλΉμ©μ ꡬνλ λ¬Έμ μ΄λ€.
- ν λ³μ κΈΈμ΄ N
(6 β€ N β€ 10)
- νλ¨μ μ§μ λΉ κ°κ²©
(0 β€ G β€ 200)
- λΈλ£¨νΈν¬μ€ μκ³ λ¦¬μ¦ μ νμ λ¬Έμ
π₯ μμ€ μ½λ
from sys import stdin, setrecursionlimit
setrecursionlimit(10 ** 9)
n = int(stdin.readline())
arr = []
res = [int(1e9)]
visited = set()
dx, dy = [1, 0, 0, -1], [0, 1, -1, 0]
for _ in range(n):
arr.append(list(map(int, stdin.readline().split())))
def solve(cnt, cost, v):
if cnt == 3:
res[0] = min(res[0], cost)
else:
for i in range(1, n - 1):
for j in range(1, n - 1):
temp_visit = set()
temp_visit.add((i, j))
tf = 1
temp = arr[i][j]
for k in range(4):
nx, ny = i + dx[k], j + dy[k]
if -1 < nx < n and -1 < ny < n:
if (nx, ny) not in v:
temp += arr[nx][ny]
temp_visit.add((nx, ny))
else:
tf = 0
break
else:
tf = 0
break
if tf and temp_visit:
v.update(temp_visit)
solve(cnt + 1, cost + temp, v)
v -= temp_visit
solve(0, 0, visited)
print(*res)
π μμ λ° μ€νκ²°κ³Ό
μμ
6
1 0 2 3 3 4
1 1 1 1 1 1
0 0 1 1 1 1
3 9 9 0 1 99
9 11 3 1 0 3
12 3 0 0 0 1
μ€νκ²°κ³Ό
12
β¨οΈ λ¬Έμ νμ΄
DFS
μκ³ λ¦¬μ¦μ μ¬μ©νλ€.
- μ¬μ μ¨μμ΄ 3κ°κ° λμ§ μμΌλ©΄, κ³μ μ¨μμ μ¬μ΄μ€λ€.
μ 체 μ’νλ₯Ό μννλ©΄μ μμ
μ νλ€. μ¨μμ μ¬μ λΆλΆμ κΈ°μ€μΌλ‘ μνμ’μ°μ μ’νλ₯Ό visited
μ§ν© μλ£νμ λ£μ΄μ£Όμ΄μ,
visited
μ μ’νλ€μλ μ¨μμ μ¬μ μ μκ² νλ€.
solve(μ¬μ μ¨μμ κ°―μ, νλ¨μ λΉλ¦¬λ λΉμ©, κ½μμ΄ νΌμ΄ μ¬μ μ μλ ꡬμλ€)
μ μ¬μ μ¨μμ κ°μλ₯Ό νλμ© λλ €μ€λ€.
- μ¬μ μ¨μμ΄ 3κ°κ° λλ€λ©΄ μ΅μλΉμ©μΈμ§ νμΈνμ¬ res κ°μ μ μ₯νλ€.
πΎ λλμ