[λ°±μ€] 2839 μ€ν λ°°λ¬ (feat.DP) (python νμ΄μ¬)
2839λ²: μ€ν λ°°λ¬
μκ·Όμ΄λ μμ¦ μ€ν곡μ₯μμ μ€νμ λ°°λ¬νκ³ μλ€. μκ·Όμ΄λ μ§κΈ μ¬νκ°κ²μ μ€νμ μ ννκ² Nν¬λ‘κ·Έλ¨μ λ°°λ¬ν΄μΌ νλ€. μ€ν곡μ₯μμ λ§λλ μ€νμ λ΄μ§μ λ΄κ²¨μ Έ μλ€. λ΄μ§λ 3ν¬λ‘κ·Έ
www.acmicpc.net
μ€ν Nν¬λ‘κ·Έλ¨μ μ£Όκ³ μ΄κ±Έ 5ν¬λ‘κ·Έλ¨, 3ν¬λ‘κ·Έλ¨ λ΄μ§λ‘ κ°μ₯ μ μ κ°μλ‘ λλλ λ¬Έμ . μ²μμλ μνμΌλ‘ ν΄κ²°νλ €λ€κ° "λμ " λ¬Έμ κ° μκ°λμ DPλ‘ ν΄κ²°νλ€.
μμ΄λμ΄
nν¬λ‘κ·Έλ¨μ (n - 3) + 3 λλ (n - 5) + 5λ‘ μκ°ν μ μλ€.
λ°λΌμ nν¬λ‘κ·Έλ¨μ λ΄μ§ κ°μλ n - 3κ³Ό n - 5 ν¬λ‘κ·Έλ¨ λ΄μ§ κ°μ μ€ μμ κ±°(min) + 1μ΄ λλ€.
μ΄ μμ΄λμ΄λ‘ ν΄κ²°νλ €λ©΄ n - 3κ³Ό n - 5μ κ°μ μ 보λ₯Ό μ μ₯ν΄ λλ€κ° μ¬μ¬μ©μ΄ νμνλ€.
3 ~ nν¬λ‘κ·Έλ¨κΉμ§ λ΄μ§μ μ΅μ κ°μλ₯Ό λ΄μ 리μ€νΈλ₯Ό μ μΈν΄μ ν΄κ²°νλ©΄ λλ€(DP).
μ 체 μ½λ
N = int(input())
INF = int(10e9)
DP = [INF] * (5001)
DP[3] = 1
DP[5] = 1
for i in range(6, N + 1):
DP[i] = min(DP[i - 3], DP[i - 5]) + 1
if DP[N] < INF:
print(DP[N])
else:
print(-1)
μ½λ μ€λͺ
μκ³ λ¦¬μ¦μ μμ΄λμ΄ μ€λͺ κ³Ό κ°λ€.
min λ©μλλ₯Ό μ°κΈ° μν΄ λ¦¬μ€νΈλ₯Ό INFκ°μΌλ‘ μ΄κΈ°νν΄ μ€λ€.
μλ₯Ό λ€μ΄ N = 10μ΄λ©΄ DP[7]κ³Ό DP[5]λ₯Ό λΉκ΅νλ€. μ΄λ λ΄μ§λ‘ 7 ν¬λ‘κ·Έλ¨μ λ§λλ κ²½μ°λ μμΌλκΉ DP[7] = INF,
λ°λΌμ DP[10] = DP[5] + 1μ΄ λλ€.
λ§μ§λ§ μΆλ ₯ν λ DP[N]κ°μ΄ INFλ³΄λ€ ν¬λ©΄ -1, μλ€λ©΄ DP[N]κ°μ μΆλ ₯ν΄ μ€λ€.