-
[Algo RhythmπΊπ] BOJ 10971 - μΈνμ μν 2Algo RhythmπΊπ/BOJ 2021. 7. 10. 01:22
π«λ¬Έμ λΆμ
λμλ€μ μλ₯Ό nn, κ° λμλ₯Ό Ci (1β€iβ€n)Ci (1β€iβ€n), κ·Έλ¦¬κ³ CaCaμμ CbCbλ‘ μ΄λνλλ° λλ λΉμ©μ Wa,bWa,bλΌκ³ νμ. μ΄λ Wa,bβ Wb,aWa,bβ Wb,aμΌ μλ μκ³ Wa,b=0Wa,b=0 μ΄λ©΄ CaCaμμ CbCbλ‘ μ΄λν μ μλ€.
μ°λ¦¬λ μΈνμμ΄ ν λ² κ°λ λμλ₯Ό μ¬λ°©λ¬Ένμ§ μμ λ μ΄λ ν λμμμ μΆλ°ν΄ nnκ°μ λμλ₯Ό λͺ¨λ κ±°μ³ λ€μ μλμ λμλ‘ λμμ¬ λ λλ μ΅μ λΉμ©μ ꡬν΄μΌ νλ€. μ΄λ μ£Όμν μ μ΄ μΈνμμ΄ μ΄λ λμμμ μΆλ°νλκ°λ μ€μνμ§ μλ€λ κ²μ΄λ€. μλνλ©΄ μλ κ·Έλ¦Όκ³Ό κ°μ΄ μ΅μ λΉμ©μΌλ‘ μ΄λκ°λ₯ν κ²½λ‘λ 'μμμ΄'μ ννλ₯Ό λκΈ° λλ¬Έμ΄λ€.
λ°λΌμ μ΄ λ¬Έμ λ μ΅μ λΉμ©μ κ°μ§ μμμ΄μ μ°Ύλ λ¬Έμ λ‘ μ΄ν΄ν μ μλ€. κΈ°λ³Έμ μΌλ‘ μμ΄μ μ°Ύλ λ¬Έμ μ΄κΈ° λλ¬Έμ backtrackingμ μ¬μ©νμ¬ ν΄κ²°ν μ μλ€.
π₯λ¬Έμ νμ΄
λ¬Έμ λΆμμμ μΈκΈνλ―μ΄ μ΄ λ¬Έμ λ μ΅μ λΉμ©μ κ°μ§ μμμ΄μ μ°Ύλ λ¬Έμ μ΄κΈ° λλ¬Έμ μ΄λ€ λμμμ μΆλ°νλκ°λ μ€μνμ§ μλ€. λ°λΌμ, μμλ‘ μΆλ° λμλ₯Ό C1C1μΌλ‘ μ νλ€.
κ·Έλ¦¬κ³ λμ λλ¨Έμ§ λμλ€μ λν΄ backtrackingμ μ€ννλλ° λ€μ depthλ‘ κ° μ μλ κΈ°μ€μ λ€μκ³Ό κ°λ€.
- λ°©λ¬Έν μ μ΄ μλ€.
- Wsrc,destβ 0Wsrc,destβ 0
μ΄λ λΆνμν κ³μ°μ μ€μ΄κΈ° μν΄ λμ λΉμ©μ΄ μ΄λ―Έ κ³μ°λ μ΅μ λΉμ©λ³΄λ€ ν΄ κ²½μ° backtracking μ€νμ μ€λ¨νλ€.
β¨λ³΅μ‘λ λΆμ
λμλ€μ μλ₯Ό nnμ΄λΌκ³ ν λ, μκ° λ³΅μ‘λμ κ³΅κ° λ³΅μ‘λλ λ€μκ³Ό κ°λ€.
β°μκ° λ³΅μ‘λ : O(n!)O(n!)
- μ΅μ μ κ²½μ° x (1β€xβ€n)x (1β€xβ€n)μ λμλ₯Ό λ°©λ¬Έν λ€ (nβx)(nβx)κ°μ λμλ€μ λν΄ backtrackingμ μ€νν΄μΌ νκΈ° λλ¬Έμ O(n!)O(n!)κ° μμλ¨.
π κ³΅κ° λ³΅μ‘λ : O(n2)O(n2)
- Wi,j (1β€i,jβ€n)Wi,j (1β€i,jβ€n)μ μ μ₯νκΈ° μν΄ O(n2)O(n2)κ° μμλ¨.
- Ci (1β€iβ€n)Ci (1β€iβ€n)μ λ°©λ¬Έμ¬λΆλ₯Ό μ μ₯νκΈ° μν΄ O(n)O(n)μ΄ μμλ¨.
πμ½λ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters#include <cstdio> #include <climits> int w[10][10]; bool visited[10]; int n, mn = INT_MAX; void solve(int src, int acc, int size) { if(acc > mn) return; if(size == n) { if(w[src][0] && acc + w[src][0] < mn) mn = acc + w[src][0]; return; } for(int dest = 0; dest < n; dest++) if(!visited[dest] && w[src][dest]) { visited[dest] = true; solve(dest, acc + w[src][dest], size + 1); visited[dest] = false; } } int main() { scanf("%d", &n); for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) scanf("%d", &w[i][j]); visited[0] = true; solve(0, 0, 1); printf("%d\n", mn); return 0; } πλ¬Έμ μΆμ²
https://www.acmicpc.net/problem/10971
10971λ²: μΈνμ μν 2
첫째 μ€μ λμμ μ Nμ΄ μ£Όμ΄μ§λ€. (2 β€ N β€ 10) λ€μ Nκ°μ μ€μλ λΉμ© νλ ¬μ΄ μ£Όμ΄μ§λ€. κ° νλ ¬μ μ±λΆμ 1,000,000 μ΄νμ μμ μ μμ΄λ©°, κ° μ μλ κ²½μ°λ 0μ΄ μ£Όμ΄μ§λ€. W[i][j]λ λμ iμμ j
www.acmicpc.net
'Algo RhythmπΊπ > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Algo RhythmπΊπ] BOJ 2225 - ν©λΆν΄ (0) 2021.07.22 [Algo RhythmπΊπ] BOJ 1463 - 1λ‘ λ§λ€κΈ° (0) 2021.07.22 [Algo RhythmπΊπ] BOJ 1759 - μνΈ λ§λ€κΈ° (0) 2021.06.30 [Algo RhythmπΊπ] BOJ 18290 - NMκ³Ό K(1) (0) 2021.06.30 [Algo RhythmπΊπ] BOJ 9095 - 1, 2, 3 λνκΈ° (0) 2021.06.29