๐ ๋ชฉ์ฐจ
1. LCS ๋ฌธ์
2. ํธ์ง๊ฑฐ๋ฆฌ
3. ํ๋ ฌ ๊ณฑ์
4. LIS
LCS ๋ Longest Common Subsequence ์ ์ฝ์๋ก ์ฃผ์ด์ง ๋ฌธ์์ด 2๊ฐ๊ฐ ์ฃผ์ด์ง ๋ ๋ ๋ฌธ์์ด ๋ด์ ๋ฌธ์๋ฅผ ๋ฝ์ ๋ง๋ค ์ ์๋ ์ต์ฅ ๊ธธ์ด์ ๊ณตํต ๋ถ๋ฌธ์์ด, ๊ธธ์ด๋ฅผ ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค.


x7์ ์ ํํ์ง ์๊ณ X6, Y6๊น์ง ๋ณธ ๊ฒ๊ณผ, y6๋ฅผ ์ ํํ์ง ์๊ณ X7, Y5๊น์ง ๋ณธ ๊ฒ ์ค ๊ธด ๊ธธ์ด์ ๊ฐ๋ค๋ ๊ฒ์ด๋ค.
๋ง์ฝ์ ๋ฌธ์์ด ๋์ด ๊ฐ๋ค๋ฉด ๋ฌด์กฐ๊ฑด ํฌํจํ๋ฉด ๋๋๊น ๋ค์๊ณผ ๊ฐ์ด ์ ๋๋ค.

(๋ค์ +1๊น์ง ๋ถ์ฌ์ฃผ๋ ๊ฒ ๋ง๋ค.)

์ผ๋ฐํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. ์๋์ ์์ if (xi == yj) ๋ก ์์ ํ๋ค.

DPํ ์ด๋ธ์ ๋ํ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ฑ์ฐ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ 1์ด๋ฏ๋ก ๊ธธ์ด๊ฐ n, m ์ด๋ผ ํ์ ๋ O(nm) ๋งํผ์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
์ญ์ถ์ ํด ์ฌ๋ผ๊ฐ๋ค๋ฉด ๊ฐ์ ๊ฒฝ์ฐ ์ผ์ชฝ ์๋ก, ๊ฐ์ง ์์ ๊ฒฝ์ฐ ๋ ๊ฐ์ง ๋ฐฉํฅ์ ๊ณ ๋ คํ์ฌ O(n+m) ์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
<์ฝ๋>

X = HUMAN
Y = CHIMPANZEE ๊ฐ ์ฃผ์ด์ง๋ฉด, ์ฝ์
6๊ฐ์ ์ญ์ (u) 1๊ฐ๋ก ์ธ๊ฐ์ด ์นจํฌ์ง๊ฐ ๋ ์ ์๋ค.
์ด ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์ X์๋ง ์๋ ๊ฒ์ ์ญ์ ํด์ผ ํ๊ณ , Y์๋ง ์๋ ๊ฒ์ ์ฝ์
ํด์ผ ํ๋๋ฐ,
์ฝ์
, ์ญ์ , ๊ต์ฒด์ ๋๋ ๋น์ฉ์ ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋ด ๋ณผ ์ ์๋ค.

๊ฒฐ๊ณผ์ ์ผ๋ก Edit Distance ๋ ๋ฌธ์์ด X๊ฐ ์ฝ์ ๊ณผ ์ญ์ , ๊ต์ฒด๋ฅผ ๊ฑฐ์ณ Y๊ฐ ๋๊ธฐ ์ํด ํ์ํ ์ต์๋น์ฉ์ ๋งํ๋ค.
DP[i][j] ๋ฅผ ๋ฌธ์์ด X_i๋ฅผ Y_j๋ก ๋ฐ๊พธ๋ ๋น์ฉ์ด๋ผ ํ ๋, DP[i][0] ์ ๋ฌธ์์ด X_i๋ฅผ Y_0์ผ๋ก ๋ฐ๊พธ๋ ๋น์ฉ์ผ๋ก ์ญ์ ๋น์ฉ์ด๊ณ , DP[0][j] ๋ ๋ฌธ์์ด X_0์ Y_j๋ก ๋ฐ๊พธ๋ ๋น์ฉ์ผ๋ก ์ฝ์ ๋น์ฉ์ด๋ค.
DP๋ฌธ์ ๋ ํ์ฌ ์ฃผ์ด์ง ๋ฌธ์ Xi, Yi๋ฅผ ์์ ๋ฌธ์ ๋ก ์ชผ๊ฐ๋ ๊ฒ์ผ๋ก i-1, j-1 ์ด ๊ทผ์ฒ๋ฅผ ๋ณด๋ฉด ๋๊ณ ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์๋ ์ญ์ , ์ฝ์ , ๊ต์ฒด์ด๋ค.
Xi ์ญ์
W_del(Xi) + DP[i-1][j] : ์ญ์ ๋ฅผ ํ๋ ๋น์ฉ + ๋๋จธ์ง Xi ๋ฅผ ์ ์ธํ ๋น์ฉ
Yj ์ฝ์
DP[i][j-1] + W_ins(Yj)
Xi => Yj ๊ต์ฒด ๋น์ฉ
DP[i-1][j-1] + Wsub(Xi, Yj)
DP[i][j] = min(1, 2, 3) : ๋ชจ๋ ๊ณ์ฐํ ํ, ๊ฐ์ฅ ์ต์๋ฅผ ๋ฐํ

๋ฐ๋ผ์ DPํ
์ด๋ธ์ ์ด์ง ๊ทธ๋ ค๋ณด๋ฉด i, j๋ฅผ ์ ํ ๋ ๋ฐ๋ก ์ + ์ญ์ ๋น์ฉ, ๋ฐ๋ก ์ผ + ์ฝ์
๋น์ฉ, ๋๊ฐ์ ์ผ์ชฝ + ๊ต์ฒด๋น์ฉ ์ค ์ต์๊ฐ์ ๊ฐ์ ธ์ค๋ฉด ๋๋ค.

๋ค์๊ณผ ๊ฐ์ด ์ผ๋ฐ์ ์ธ ํ๋ ฌ ๊ณฑ์
์ ํ๋ ๊ฒฝ์ฐ ํ ์นธ์ ๊ณ์ฐํ๋๋ฐ O(q), pr ์นธ์ ๊ณ์ฐ์ด ํ์ํ๋ฏ๋ก ์ด O(pqr)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.

์๋์ ๊ฒฝ์ฐ๋ ์ด๋จ๊น? M1, M2, M3 ํฌ๊ธฐ๊ฐ ๋ค๋ฅธ ์ธ ๊ฐ์ ํ๋ ฌ์ด ์ฃผ์ด์ง ๋, ๊ฐ์ ๊ณฑ์
์ด๋ผ๋ ์ด๋ป๊ฒ ๊ดํธ๋ฅผ ๋ฌถ๋๋์ ๋ฐ๋ผ ๋๋ ๋น์ฉ์ด ๋ค๋ฅด๋ค. (๋ค์์ ๊ฒฝ์ฐ์์ ์ค๋ฅธ์ชฝ์ด ํจ์ฌ ์ ๋ฆฌํ๋ค.)

๋ฐ๋ผ์ ์ผ๋ฐํํ์ฌ M1, M2 .. Mn์ n๊ฐ ํ๋ ฌ์ ๊ณฑ์ ์ด ์ฐจ๋ก๋ก ์ฃผ์ด์ง ๋ ํ๋ ฌ๊ณฑ์ ์ ๋น์ฉ์ ์ต์ํํ๋ ๊ฒ์ ์ต์๋น์ฉ์ด ๋๋๋ก ๊ดํธ๋ฅผ ๋ฌถ๋ ์ผ๊ณผ ๊ฐ์ผ๋ฉฐ, n = 4์ผ ๊ฒฝ์ฐ ๋๊น์ง ๊ดํธ์น๋ ๊ฒฝ์ฐ์ ์๋ 5๊ฐ์ด๋ค. (5๊ฐ ์ค 1๊ฐ๋ฅผ ๊ณ ๋ฅด๋ ๋ฌธ์ .์ 5๊ฐ์ธ์ง ์๊ฐํด๋ณด์)
์ฌ์ค ์ด ์ซ์๋ Catalan Number ์ ์ผ์นํ๋ฉฐ ์ง์์์ด ๋์ด ๋งค์ฐ ํฐ ์์ด๋ฏ๋ก DP๋ก ํด๊ฒฐํด๋ณด์๋ ๊ฒฐ๋ก .
๋ค์ M1, M2, M3, M4 ์ ๋ค ๊ฐ ํ๋ ฌ๋ก๋ง ๋์์์, ๋ง์ง๋ง ์ฐ์ฐ์ ๊ด์ฐฐํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค. DP[i][j] ๋ฅผ Mi ... Mj ์ ๋ํ ๊ดํธ์น๊ธฐ์ ๋น์ฉ์ด๋ผ ์ ์ํ๊ณ , ์ต์ข ์ ์ผ๋ก DP[1][n] ์ ๊ตฌํ์. (์ด๋ Mk ๋ Pk X Pk+1 ํ๋ ฌ์ด๋ค.)
๋ฐ๋ผ์ DP[1][4] ๋ min(1,2,3)์ธ๋ฐ ์กฐ๊ธ ๋ ์ ํ์๋ต๊ฒ ์ ๋ฆฌํ์.
DP[i][j] = Mi๋ถํฐ Mj๊น์ง์ ํ๋ ฌ ๊ณฑ์
์ ๋๋ ์ต์ ๋น์ฉ, ์ค๊ฐ์ Mk์ Mk+1์ ์ง๋จ
= min(DP[i][k] + DP[k+1][j] + PiPkPk+1)

DP ํ
์ด๋ธ์ ๊ทธ๋ ค๋ณด๋ฉด ์๋์ ๊ฐ๋ค.

์ฃผ์ด์ง ์ซ์ ๋ฐฐ์ด A = [2, 8, 5, 10, 18, 13, 20, 4] ๋ฅผ ๊ฐ์ง๊ณ ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ฌธ์ ๋ฐฐ์ด์ ์ฐพ์.
LIS[i] ์ ์ ์๋ฅผ A[i] ๋ก ๋๋๋ ๋ถ์์ด ์ค ๊ฐ์ฅ ๊ธด ๋ถ๋ฌธ์ ๊ธธ์ด๋ผ ํ๊ณ ,
์ ํ์์ LIS[i] = max(LIS[j] + 1) ์ด๋ผ ํ๋ฉด ๋๋ค.
DP๋ก n^2์๋, nlogn ์ ์๊ฐ์๋ ํ๋ฆฐ๋ค