https://www.acmicpc.net/problem/14889
14889λ²: μ€ννΈμ λ§ν¬
μμ 2μ κ²½μ°μ (1, 3, 6), (2, 4, 5)λ‘ νμ λλλ©΄ λκ³ , μμ 3μ κ²½μ°μλ (1, 2, 4, 5), (3, 6, 7, 8)λ‘ νμ λλλ©΄ λλ€.
www.acmicpc.net
λ¬Έμ
μ€λμ μ€ννΈλ§ν¬μ λ€λλ μ¬λλ€μ΄ λͺ¨μ¬μ μΆκ΅¬λ₯Ό ν΄λ³΄λ €κ³ νλ€. μΆκ΅¬λ νμΌ μ€νμ νκ³ μ무 μ°Έμλ μλλ€. μΆκ΅¬λ₯Ό νκΈ° μν΄ λͺ¨μΈ μ¬λμ μ΄ Nλͺ μ΄κ³ μ κΈ°νκ²λ Nμ μ§μμ΄λ€. μ΄μ N/2λͺ μΌλ‘ μ΄λ£¨μ΄μ§ μ€ννΈ νκ³Ό λ§ν¬ νμΌλ‘ μ¬λλ€μ λλ μΌ νλ€.
BOJλ₯Ό μ΄μνλ νμ¬ λ΅κ² μ¬λμκ² λ²νΈλ₯Ό 1λΆν° NκΉμ§λ‘ λ°°μ νκ³ , μλμ κ°μ λ₯λ ₯μΉλ₯Ό μ‘°μ¬νλ€. λ₯λ ₯μΉ Sijλ iλ² μ¬λκ³Ό jλ² μ¬λμ΄ κ°μ νμ μνμ λ, νμ λν΄μ§λ λ₯λ ₯μΉμ΄λ€. νμ λ₯λ ₯μΉλ νμ μν λͺ¨λ μμ λ₯λ ₯μΉ Sijμ ν©μ΄λ€. Sijλ Sjiμ λ€λ₯Ό μλ μμΌλ©°, iλ² μ¬λκ³Ό jλ² μ¬λμ΄ κ°μ νμ μνμ λ, νμ λν΄μ§λ λ₯λ ₯μΉλ Sijμ Sjiμ΄λ€.
N=4μ΄κ³ , Sκ° μλμ κ°μ κ²½μ°λ₯Ό μ΄ν΄λ³΄μ.

μλ₯Ό λ€μ΄, 1, 2λ²μ΄ μ€ννΈ ν, 3, 4λ²μ΄ λ§ν¬ νμ μν κ²½μ°μ λ νμ λ₯λ ₯μΉλ μλμ κ°λ€.
- μ€ννΈ ν: S12 + S21 = 1 + 4 = 5
- λ§ν¬ ν: S34 + S43 = 2 + 5 = 7
1, 3λ²μ΄ μ€ννΈ ν, 2, 4λ²μ΄ λ§ν¬ νμ μνλ©΄, λ νμ λ₯λ ₯μΉλ μλμ κ°λ€.
- μ€ννΈ ν: S13 + S31 = 2 + 7 = 9
- λ§ν¬ ν: S24 + S42 = 6 + 4 = 10
μΆκ΅¬λ₯Ό μ¬λ―Έμκ² νκΈ° μν΄μ μ€ννΈ νμ λ₯λ ₯μΉμ λ§ν¬ νμ λ₯λ ₯μΉμ μ°¨μ΄λ₯Ό μ΅μλ‘ νλ €κ³ νλ€. μμ μμ μ κ°μ κ²½μ°μλ 1, 4λ²μ΄ μ€ννΈ ν, 2, 3λ² νμ΄ λ§ν¬ νμ μνλ©΄ μ€ννΈ νμ λ₯λ ₯μΉλ 6, λ§ν¬ νμ λ₯λ ₯μΉλ 6μ΄ λμ΄μ μ°¨μ΄κ° 0μ΄ λκ³ μ΄ κ°μ΄ μ΅μμ΄λ€.
μ λ ₯
첫째 μ€μ N(4 ≤ N ≤ 20, Nμ μ§μ)μ΄ μ£Όμ΄μ§λ€. λμ§Έ μ€λΆν° Nκ°μ μ€μ Sκ° μ£Όμ΄μ§λ€. κ° μ€μ Nκ°μ μλ‘ μ΄λ£¨μ΄μ Έ μκ³ , iλ² μ€μ jλ²μ§Έ μλ Sij μ΄λ€. Siiλ νμ 0μ΄κ³ , λλ¨Έμ§ Sijλ 1λ³΄λ€ ν¬κ±°λ κ°κ³ , 100λ³΄λ€ μκ±°λ κ°μ μ μμ΄λ€.
μΆλ ₯
첫째 μ€μ μ€ννΈ νκ³Ό λ§ν¬ νμ λ₯λ ₯μΉμ μ°¨μ΄μ μ΅μκ°μ μΆλ ₯νλ€.
λ¬Έμ ν΄κ²°
μ΄κ±΄ νλΆ λ νμ΄λ³Έ κΈ°μ΅μ΄ μμλλ° νμ΄μ¬μΌλ‘ λ€μ νλ €κ³ νλκΉ μ‘°ν©μΌλ‘ λ μ½κ² ν리λ? μκ°ν΄μ
μ½μ§μ μ΄μ¬ν νλ€.. μ‘°ν©μΌλ‘ ν΄λ λ κ±° κ°κΈ΄ νμ§λ§ μΌμ± μκ³ λ¦¬μ¦μ dfsλ₯Ό μ°μ΅ν΄λλ©΄ μ’μΌλκΉ λ€μ !
μ‘°ν©μ²λΌ Nλͺ μ€μμ λ½μ μ μλ visited μ²λ¦¬λ₯Ό νκ³ , N//2λͺ μ λ½μλ€λ©΄ visitedλ μ μ, not visited μ μλΌλ¦¬ κ°μ λν΄μ£Όλ©΄ λλ€.
νμ΄μ¬μ νμ€ν C보λ€λ μ½λκ° λ³΄κΈ°κ° κΉλν κ±° κ°λΉ π₯²
μκ°μ΄κ³Όκ° κ³μ λμ μ½κ° μ΄λ°μλλ°,, visitedμ²λ¦¬ ν λ μΈλ±μ€κ°λ ν¨κ» λ겨μ μ΄μ μ λΉκ΅ν μ΄νλΆν° λΉκ΅νλκΉ ν΅κ³Όπ
N = int(input())
visited = [False for _ in range(N)]
arr = [list(map(int, input().split())) for _ in range(N)]
minimum = 1e9
def solutions(cnt, index):
global minimum
if cnt == N//2:
start, link = 0, 0
for i in range(N):
for j in range(N):
if visited[i] and visited[j]:
start += arr[i][j]
elif not visited[i] and not visited[j]:
link += arr[i][j]
minimum = min(minimum, abs(start - link))
return
for i in range(index, N):
if not visited[i]:
visited[i] = True
solutions(cnt+1, i+1)
visited[i] = False
solutions(0,0)
print(minimum)
'Coding' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[BOJ] 14501λ²: ν΄μ¬ (0) | 2023.03.13 |
---|---|
[Programmers] μμ λ§λ€κΈ° (0) | 2023.03.13 |
[Programmers] μ«μ λ¬Έμμ΄κ³Ό μλ¨μ΄ (0) | 2023.03.10 |
[Baekjoon] μ°μ°μ λΌμλ£κΈ° (0) | 2023.03.09 |
[Baekjoon] μν κ°λ (0) | 2023.03.09 |