π‘ 쑰건
- λ€μ΄λλ―Ή νλ‘κ·Έλλ°(λμ κ³νλ²), λ€μ΄λλ―Ήμ μ΄λ¦μ΄ μμ² κ±°μ°½νμ§λ§ μ¬μ€ μ΄λ¦μ λΉν΄ κ°λ
μ κ°λ¨νλ€.
- λ€μ΄λλ―Ήμ κΈ°λ³Έ μμ΄λμ΄λ λ°λ‘ μ΄μ μ κ³μ°ν κ°μ μ¬μ©ν΄μ (= μ΄λ―Έ κ³μ°λ κ°μ μ¬μ©ν΄μ, μ΄λ €μ΄ λ§λ‘ λ©λͺ¨μ΄μ μ΄μ
.)
λ°λ³΅λλ λκ°μ μ°μ° νμλ₯Ό μ€μ΄λ κ².
- λ€μ°¨μ λ°°μ΄λ‘λ κ°λ₯νλ€. μ€λ₯Έμͺ½, μλμͺ½μΌλ‘λ§ μμ§μΌ μ μμ λ,
D[1][1]μμ D[x][y]κΉμ§ λλ¬νλ κ²½μ°μ μλ₯Ό ꡬνλ λ¬Έμ λ μΌμΌν λͺ¨λ κ²½μ°λ₯Ό λ€ κ³μ°ν νμ μμ΄,
D[i][j] = (i, j)μ λλ¬νλ λμ κ²½μ°μ μ = D[i-1][j] + D[i][j-1]λ₯Ό μΈμμ ν΄κ²°ν μλ μλ€.
- β, β, βμ μΈ λ°©ν₯λ§ μ¬μ©ν΄μ ν λ²μ ν μΉΈμ© μ΄λν λ, μΌμͺ½ μ
(1, 1)μμ μΆλ°νμ¬ μ€λ₯Έμͺ½ μλ (n, m)μ λμ°©νλ κ²½μ°μ μλ₯Ό ꡬνλ λ¬Έμ .
(1 β€ n, m β€ 1,000)
- κ²½μ°μ μκ° μμ² μ»€μ§ μ μμΌλ―λ‘ κ²½μ°μ μλ₯Ό 1,000,000,007(=109+7)λ‘ λλ λλ¨Έμ§λ₯Ό μΆλ ₯νλ€.
- DP μ νμ λ¬Έμ
π₯ μμ€ μ½λ
from sys import stdin
n, m = map(int, stdin.readline().split())
dp = [[0] * (m + 1) for _ in range(n + 1)]
dp[0][0] = 1
for i in range(1, n + 1):
for j in range(1, m + 1):
dp[i][j] = (dp[i-1][j] + dp[i][j-1] + dp[i-1][j-1]) % (int(1e9) + 7)
print(dp[n][m])
π μμ λ° μ€νκ²°κ³Ό
μμ
4 5
μ€νκ²°κ³Ό
129
β¨οΈ λ¬Έμ νμ΄
- μ΄λ² λ¬Έμ λ λ€μ΄λλ―Ή νλ‘κ·Έλλ°μ κΈ°λ³Ένμ΄λΌκ³ μκ°νκ³ νμ΄ν΄λ³΄μλ€.
- λ¬Έμ μμ μꡬνλ κ²μ (1, 1)λΆν° (N, M)κΉμ§ λλ¬νλ κ²½μ°μ μλ₯Ό ꡬνλ κ²μ΄λ€.
- (N * M) ν¬κΈ°μ 2μ°¨μ λ°°μ΄μ DP λΌκ³ νλ€λ©΄, μ΄ λ¬Έμ μμ λ°λΌλ κ°μ DP[N][M]μ μμ κ²μ΄λ€.
- (3)λ²μμ ꡬνλ €λ DP[N][M] μ κ°μ κ°κ° DP[N-1][M], DP[N][M-1], DP[N-1][M-1] μ ν©μΌλ‘ ννν μ μλ€.
DP[N-1][M] λν DP[N-2][M], DP[N-1][M-1], DP[N-2][M-2] μ ν©μΌλ‘ ννν μ μλ€.
- μ΄μ λ°λΌμ μ νμμ DP[i][j] = (DP[i-1][j], DP[i][j-1], DP[i-1][j-1]) μ΄λ€.
- μ΄λ₯Ό int(1e9) + 7 λ‘ λλ λλ¨Έμ§λ₯Ό dpμ μ μ₯νλ€.