https://www.acmicpc.net/problem/1106
1106λ²: νΈν
첫째 μ€μ Cμ ννμ΄κ° ν보ν μ μλ λμμ κ°μ Nμ΄ μ£Όμ΄μ§λ€. Cλ 1,000λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄κ³ , Nμ 20λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄λ€. λμ§Έ μ€λΆν° Nκ°μ μ€μλ κ° λμμμ ν보ν λ
www.acmicpc.net
λ¬Έμ
μΈκ³μ μΈ νΈν μΈ νν νΈν μ μ¬μ₯μΈ κΉννμ μ΄λ²μ μμ μ μ‘°κΈ λ리기 μν΄μ ν보λ₯Ό νλ €κ³ νλ€.
ννμ΄κ° ν보λ₯Ό ν μ μλ λμκ° μ£Όμ΄μ§κ³ , κ° λμλ³λ‘ ν보νλλ° λλ λΉμ©κ³Ό, κ·Έ λ λͺ λͺ μ νΈν κ³ κ°μ΄ λμ΄λλμ§μ λν μ λ³΄κ° μλ€.
μλ₯Ό λ€μ΄, “μ΄λ€ λμμμ 9μμ λ€μ¬μ ν보νλ©΄ 3λͺ μ κ³ κ°μ΄ λμ΄λλ€.”μ κ°μ μ 보μ΄λ€. μ΄λ, μ΄λ¬ν μ 보μ λνλ λμ μ μλ°° λ§νΌμ ν¬μν μ μλ€. μ¦, 9μμ λ€μ¬μ 3λͺ μ κ³ κ°, 18μμ λ€μ¬μ 6λͺ μ κ³ κ°, 27μμ λ€μ¬μ 9λͺ μ κ³ κ°μ λμ΄λκ² ν μ μμ§λ§, 3μμ λ€μ¬μ ν보ν΄μ 1λͺ μ κ³ κ°, 12μμ λ€μ¬μ 4λͺ μ κ³ κ°μ λμ΄λκ² ν μλ μλ€.
κ° λμμλ 무ν λͺ μ μ μ¬μ μΈ κ³ κ°μ΄ μλ€. μ΄λ, νΈν μ κ³ κ°μ μ μ΄λ Cλͺ λμ΄κΈ° μν΄ ννμ΄κ° ν¬μν΄μΌ νλ λμ μ΅μκ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫째 μ€μ Cμ ννμ΄κ° ν보ν μ μλ λμμ κ°μ Nμ΄ μ£Όμ΄μ§λ€. Cλ 1,000λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄κ³ , Nμ 20λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄λ€. λμ§Έ μ€λΆν° Nκ°μ μ€μλ κ° λμμμ ν보ν λ λλ λΉμ©κ³Ό κ·Έ λΉμ©μΌλ‘ μ»μ μ μλ κ³ κ°μ μκ° μ£Όμ΄μ§λ€. μ΄ κ°μ 100λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄λ€.
μΆλ ₯
첫째 μ€μ λ¬Έμ μ μ λ΅μ μΆλ ₯νλ€.
λ¬Έμ νμ΄
- νΉμ λΉμ©μ λ€μ¬μ ν보λ₯Ό ν μ§ λ§μ§λ₯Ό νλ¨νλ 0/1 knapsack λ¬Έμ μ΄λ―λ‘ DPλ₯Ό μ΄μ©ν΄μ νμλ€.
- μ£Όμν μ μ dpμ ν¬κΈ°λ₯Ό λ¨μν cλ‘ μ μΈνλ κ²μ΄ μλλΌ, c+100μΌλ‘ μ μΈν΄μΌ νλ€.
- μλνλ©΄, cλ³΄λ€ λ λ§μ μ¬λμ ν보ν μ μλ λΉμ©μ΄ cλ₯Ό ν보νλ λΉμ©λ³΄λ€ λ μ κ² λ€ μ μκΈ° λλ¬Έμ΄λ€.
- μλ₯Ό λ€μ΄, cλͺ μκ² ν보νλ λΉμ©μ΄ 4μμΈλ°, 1μμΌλ‘ c+1λͺ μκ² ν보ν μ μλ μ λ³΄κ° μ£Όμ΄μ§λ κ²½μ°λ μκΈ° λλ¬Έμ΄λ€.
- c+100μΌλ‘ μ‘μ μ΄μ λ λ¬Έμ λ₯Ό μ½μ΄λ³΄λ©΄ ν보ν μ μλ μ¬λμ μ΅λ μκ° 100μ΄κΈ° λλ¬Έμ΄λ€.
- λ¨Όμ 0λͺ μκ² ν보ν μ μλ λΉμ©μ 0μμ΄λ―λ‘ dp[0]=0μ μ μΈν΄μ€λ€.
- κ·Έλ¦¬κ³ , info λ°°μ΄μ μ μ₯ν΄λ λΉμ©κ³Ό ν보 κ°λ₯ μΈμμ forλ¬ΈμΌλ‘ νμνλ©΄μ forλ¬Έμ λλ©΄μ νμ¬ νμ μ€μΈ ν보 κ°λ₯ μΈμλΆν° c+100κΉμ§ νμνλ©΄μ λΉμ©μ μ¬μ©ν΄μ ν보νλ κ²κ³Ό κ·Έ μ μ κ³μ°ν dp κ° μ€ λ μμ κ°μΌλ‘ dp κ°μ κ°±μ ν΄μ€λ€.
- dp[i-people]+cost
- μλ₯Ό λ€μ΄ 5λͺ μκ² ν보νλ λ°μ 3μμ΄ λ λ€κ³ κ°μ νμ λ, dp[6]λ₯Ό κ³μ°ν΄μΌ νλ€λ©΄ 1λͺ μκ² ν보νλ μ΅μκ°μΈ dp[1]μμ costλ₯Ό μΆκ°ν΄μ 5λͺ μκ² λ ν보ν μ μλ κ°μΌλ‘ κ³μ°ν dp[6]μ΄ κΈ°μ‘΄μ forλ¬Έμ λλ©΄μ κ³μ°λ dp[6] κ°(μμ§ κ³μ°λμ§ μμ 1e9)λ³΄λ€ λ μλ€λ©΄ dp[6-5]+3 κ°μΌλ‘ dp[6]μ κ°±μ ν΄μ£Όλ κ²μ΄λ€.
- dp[i-people]+cost
- μ΄λ¬ν κ³Όμ μ λͺ¨λ info λ°°μ΄κ³Ό κ° λ°°μ΄μ ν보 μΈμ ~ c+100 κΉμ§ νμνκ³ , dp κ°μ μΈλ±μ€κ° c μ΄μμΈ κ°λ€ μ€ κ°μ₯ μμ κ°μ μΆλ ₯νλ©΄ λλ€.
import sys
input=sys.stdin.readline
c,n=map(int, input().split(' '))
# λΉμ© / μ¬λ μ
info=[list(map(int, input().split(' '))) for _ in range(n)]
# infoλ‘ μ
λ ₯ λ μ μλ μ΅λ μ¬λ μκ° 100λͺ
μ΄κ³ , cλ³΄λ€ λ λ§μ μ¬λμκ² ν보ν μ μλ λΉμ©μ΄ μ΅μκ°μΌ μ μμ
dp=[1e9]*(c+100)
dp[0]=0
for cost, people in info:
for i in range(people, c+100):
dp[i]=min(dp[i-people]+cost, dp[i])
print(min(dp[c:]))
'μκ³ λ¦¬μ¦ > DP' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€ 11660 π₯] κ΅¬κ° ν© κ΅¬νκΈ° 5 (1) | 2023.11.04 |
---|---|
[λ°±μ€ 9465 π₯] μ€ν°μ»€ (1) | 2023.11.04 |
[λ°±μ€ 2156 π₯] ν¬λμ£Ό μμ (0) | 2023.11.04 |
[λ°±μ€ 1890 π₯] μ ν (1) | 2023.11.04 |
[λ°±μ€ 17626 π₯] Four Squares (1) | 2023.11.02 |