๐ก์ธํ์ ์ํ ๋ฌธ์ (Traveling Salesman Problem, TSP) ๋?
์ด๋ค ๋์์์ ์ถ๋ฐํ์ฌ ๋ค๋ฅธ ๋ชจ๋ ๋์๋ค์ ๋๊ณ
๋ค์ ์ถ๋ฐํ๋ ๋์๋ก ๋์์ค๋๋ฐ ๋๋ ์ต์ ๋น์ฉ์ ์ฐพ๋ ๋ฌธ์
๋ธ๋ฃจํธ ํฌ์ค ํด๊ฒฐ๋ฐฉ๋ฒ ( ์ข์ ๋ฐฉ๋ฒ x)
์ธํ์ ์ํ ๋ฌธ์ ๋ฅผ ๋ง์ฐํ๊ฒ ์๊ฐํด๋ณด๋ฉด, ํน์ ์ถ๋ฐ ๋์๋ฅผ ๊ฐ์ ํด๋๊ณ ๋์๋ฅผ ์ํํด๋ ๊ฒฝ๋ก์ ๊ธธ์ด๋ ๋ค๋ฅด์ง ์์ ๊ฒ์ด๋ค. ์ถ๋ฐ ๋์๋ฅผ A๋ก ๊ฐ์ ํด๋๊ณ ๋ค๋ฅธ ๋์๋ค์ ์ํํ๋ ๋ฐฉ์์ (n-1)! ํ์์ผ๋ก ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ ์ ์๋ค.
ํ์ง๋ง ์ด ๊ฒฝ์ฐ๋ n์ด ์ปค์ง๋ฉด ์ปค์ง์๋ก ๋ง์ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ์ ธ์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉ๋์ง ์๋๋ค.
DP ์ ์ฉ ๋ฐฉ์ (๋์๊ฐ 16๊ฐ ์ดํ์ผ ๋) / ์ต์ ์ ์ ๊ทผ ๋ฐฉ์
DP ๋ฉ๋ชจ์ ์ด์
= (n-1)!์ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ์กฐ์ฌํ์ง ์๊ณ ์ค๋ณต๋ ๊ฒฝ๋ก๋ฅผ ์ ๊ฑฐํ๋ ๊ธฐ๋ฒ
๋นํธ๋ง์คํฌ = ํน์ ๋์๋ฅผ ๋ฐฉ๋ฌธํ ์ํ๋ฅผ ์ ์ฅํ ๋ ์ฌ์ฉ
DP ๋ฉ๋ชจ์ ์ด์
๊ธฐ๋ฒ์ ๋์ผํ ํ์๋ฌธ์ ์ ๋ฐ๋ณต์ ๋ง์์ค์ผ๋ก์จ ๋ ๋์ ํจ์จ์ ์ฐ์ฐ์ ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค.
(๋ํ์ ์ผ๋ก๋ ํผ๋ณด๋์น ์์ด์ Top-Down ๋ฐฉ์์ ๊ตฌํ ๋ ์ฌ์ฉ)
๋นํธ๋ง์คํน์ bit ์ฐ์ฐ์ผ๋ก ์๋ฅผ ๋ค์ด 16๊ฐ์ ๋์๋ฅผ ํํํ ๋ ์์ ๋ฐฉ๋ฒ์ผ๋ก ํํํ๋ ค๋ฉด 2^16๊ฐ์ง์ ๊ฒฝ์ฐ๋ฅผ ์ผ์ผ์ด ๋ค ํํํด์ผํ๋๋ฐ ๋นํธ๋ง์คํน์ผ๋ก๋ 16bit์ผ๋ก ํํํ ์ ์๋ค.
์๋ฅผ ๋ค์ด 16๊ฐ์ ๋์๋ค ์ค 1๋ฒ, 2๋ฒ, 6๋ฒ ๋์๋ฅผ ๋ฐฉ๋ฌธ ํ๋ค๊ณ ํ๋ฉด 0000 0000 0010 0011 ์ด๋ฐ์์ผ๋ก ๊ฐ ์๋ฆฌ์ 1๋ก ๋ฐฉ๋ฌธ ํ์๋ฅผ ํด์ค ์ ์๋ค.
๊ทธ๋ฆผ๊ณผ ๊ฐ์ด 1๋ฒ~5๋ฒ ๋์๋ค๊ณผ ์ด๋ ๊ฐ๋ฅํ ๊ฒฝ๋ก๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณธ๋ค.
์ถ๋ฐ ๊ฒฝ๋ก๋ฅผ 1์ด๋ผ๊ณ ์ง์ ํ์ ๋ ,
์ผ์ชฝ ๊ทธ๋ฆผ์ 1-> 2-> 3-> 5-> 4 ์์ผ๋ก ์ํ๋ฅผ ํ๊ณ ์ค๋ฅธ์ชฝ๊ทธ๋ฆผ์ 1-> 3-> 2-> 5-> 4 ์์ผ๋ก ์ํ๋ฅผ ํ๋ค.
์ ๋ ๋ฐฉ์์ 5->4 ์ ๊ฒฝ๋ก๊ฐ ์ค๋ณต๋์ด ๊ตฌํด์ง๋ค.
์ด๋ฏธ ๋ฐฉ๋ฌธํ ๋์๋ค๊ณผ ํ์ฌ ์์นํ ๋์๊ฐ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์ต์ ๋น์ฉ์ด ์ผ์ ํ๋ฏ๋ก 5๋ฒ ๋์์์์ ์ต์๋น์ฉ์ ๊ฐ๋ค. ๋ฐ๋ผ์ ์ค๋ณต๋๋ ๊ฒฝ์ฐ๋ฅผ ๋๋ฒ ๊ตฌํ๋๊ฑด ํจ์จ์ ์ด์ง ์๋ค.
์ด๋ด ๋ DP ๋ฉ๋ชจ์ ์ด์
๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์ต์๋น์ฉ์ ์ ์ฅํด๋์ด ์ค๋ณตํ์ฌ ๊ตฌํ์ง ์๋๋ก ํ๋ค.
์ต์๋น์ฉ์ 2์ฐจ์ ๋ฐฐ์ด๋ก ํํํ๋๋ฐ, ์ต์๋น์ฉ์ด ๊ฐ์ ์กฐ๊ฑด ์ฆ , ํ์ ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๋์๋ค์ ์งํฉ, ์ด์ ํ์ฌ ์๋ ๋์๋ฒํธ๋ฅผ ํ์ํ๋ค.
DP[i][j] = ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๋์๋ค์ ์งํฉ์ด i, ํ์ฌ ์๋ ๋์๋ฅผ j๋ก ๋์ด, ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๋๋จธ์ง ๋์๋ค์ ๋ชจ๋ ๋ฐฉ๋ฌธํ ๋ค ์ถ๋ฐ ๋์๋ก ๋์์ฌ ๋ ๋๋ ์ต์ ๋น์ฉ์ ๊ตฌํ๋ค.
์ด๋ i์ ๋ฒ์๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ 0<=i<=2^n , j์ ๋ฒ์๋ 0<=j<=5์ด๋ค.
์ผ์ชฝ ๊ทธ๋ฆผ์ DP ๋ฉ๋ชจ์ ์ด์
๊ธฐ๋ฒ์ ํ์ฉํด๋ณด๋ฉด 1->2->3->5->4 ์์ผ๋ก ๋์๋ฅผ ์ง๋ ๋, DP[00001][1], DP[00011][2], DP[00111][3] , DP[10111][5] , DP[11111][4] ์์ผ๋ก ๊ฐฑ์ ๋๋ค.
1->3->2->5->4 ์์ผ๋ก ๋์๋ฅผ ์ง๋ ๋๋ DP[00001][1], DP[000101][3], DP[00111][2] , DP[10111][5], DP[11111][4] ์์ผ๋ก ๊ฐฑ์ ๋๋๋ฐ, 5๋ฒ ๋์ฐฉํ์ ์ [10111][5]์ ๊ฐ(=3)์ด ์ด๋ฏธ ์์ผ๋ฏ๋ก ๊ทธ ์ดํ๋ฅผ ๊ตฌํ ํ์ ์์ด ํด๋น ๋ฐฐ์ด์ ๊ฐ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ด๋ ๋ฏ DP๋ฉ๋ชจ์ ์ด์
๊ธฐ๋ฒ๊ณผ ๋นํธ๋ง์คํน์ ์ฌ์ฉํ์ฌ ์ต์ ๋น์ฉ์ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ด ์ธํ์ ์ํ ๋ฌธ์ ์ ์ต์ ํ๋ ์๊ณ ๋ฆฌ์ฆ ํ์ ๊ธฐ๋ฒ์ด๋ค.
๋ฐฑ์ค ์ธํ์ ์ํ ๋ฌธ์ ํ์ด๋ณด๊ธฐ : https://www.acmicpc.net/problem/2098
2098๋ฒ: ์ธํ์ ์ํ
์ฒซ์งธ ์ค์ ๋์์ ์ N์ด ์ฃผ์ด์ง๋ค. (2 ≤ N ≤ 16) ๋ค์ N๊ฐ์ ์ค์๋ ๋น์ฉ ํ๋ ฌ์ด ์ฃผ์ด์ง๋ค. ๊ฐ ํ๋ ฌ์ ์ฑ๋ถ์ 1,000,000 ์ดํ์ ์์ ์ ์์ด๋ฉฐ, ๊ฐ ์ ์๋ ๊ฒฝ์ฐ๋ 0์ด ์ฃผ์ด์ง๋ค. W[i][j]๋ ๋์ i์์ j
www.acmicpc.net