[λ°±μ€] 1535 μλ with Python
π BOJ 1535 μλ
π‘ 쑰건
첫째 μ€μ μ¬λμ μ
N(β€ 20)
.λμ§Έ μ€μ κ°κ°μ μ¬λμκ² μΈμ¬λ₯Ό ν λ, μλ 체λ ₯μ΄ 1λ² μ¬λλΆν° μμλλ‘ μ λ ₯.
μ μ§Έ μ€μλ κ°κ°μ μ¬λμκ² μΈμ¬λ₯Ό ν λ, μ»λ κΈ°μ¨μ΄ 1λ² μ¬λλΆν° μμλλ‘ μ λ ₯.
체λ ₯κ³Ό κΈ°μ¨μ 100λ³΄λ€ μκ±°λ κ°μ μμ°μ λλ 0.
μΈμ€μ΄κ° μ»μ μ μλ μ΅λ κΈ°μ¨μ μΆλ ₯.
λΈλ£¨νΈν¬μ€ μκ³ λ¦¬μ¦, λ°°λ μκ³ λ¦¬μ¦ μ ν λ¬Έμ
π₯ μμ€ μ½λ
from sys import stdin
n = int(stdin.readline())
stamina_consum = [0] + list(map(int, stdin.readline().split()))
get_pleasure = [0] + list(map(int, stdin.readline().split()))
dp = [[0] * 101 for _ in range(n + 1)]
for i in range(1, n + 1):
for j in range(1, 101):
if stamina_consum[i] <= j:
dp[i][j] = max(dp[i-1][j], dp[i-1][j - stamina_consum[i]] + get_pleasure[i])
else:
dp[i][j] = dp[i-1][j]
print(dp[n][99])
π μμ λ° μ€νκ²°κ³Ό
μμ
3
1 21 79
20 30 25
μ€νκ²°κ³Ό
50
β¨οΈ λ¬Έμ νμ΄
λΈλ£¨νΈν¬μ€ μκ³ λ¦¬μ¦
νΉμλ μ μκ³ λ¦¬μ¦
μΌλ‘ νμ΄ν μ μλ€.
λλλ μ μκ³ λ¦¬μ¦
μ μ¬μ©νλ€.μΈμ¬λ₯Ό ν λ μ¬μ©νλ μ€ν λ―Έλ μλͺ¨νλ 리μ€νΈλ₯Ό
stamina_consum
μ[0]
μ μ°κ²°νμ¬ μ μ₯νλ€.
μΈμ¬λ₯Ό ν λ μ»μ μ μλ κΈ°μ¨ λ¦¬μ€νΈλ₯Όget_pleasure
μ[0]
μ μ°κ²°νμ¬ μ μ₯νλ€.dp λ°°μ΄μ λ§λ λ€.
1λͺ λΆν° nλͺ
κΉμ§ μΈμ¬λ₯Ό νμ λ, μ»μ μ μλ μ΅λμ κΈ°μ¨μ κ°μ μ μ₯ν λ°°μ΄.i
λ²μ§Έ μ¬λμκ² μΈμ¬λ₯Ό νκ³ , μ€ν λ―Έλ μλͺ¨λλ³΄λ€ μ²΄λ ₯j
κ° ν΄ λ μΈμ¬λ₯Ό ν΄μ μ»μ μ μλ κΈ°μ¨μ μμ κ³μ°νμ¬ dpμ μ μ₯νλ€.- 체λ ₯μ΄ 1μ΄ κΈ°μ€μ΄λ©°, μΆλ ₯ν λ
dp[n][100]
μ μΆλ ₯νλ©΄ μΈμ€μ΄κ° μΈμ¬λ₯Ό νλ€ μ£½μ΄λ²λ¦° κ²½μ°μ΄λ μ€λ΅μ΄λ€.dp[n][99]
λ₯Ό μΆλ ₯νλ€. - λ§μ½
stamina[i]
λ³΄λ€ μ²΄λ ₯j
κ° μ μ κ²½μ°,dp[i][j]
λdp[i-1][j]
μ κ°μ κ°μ Έλ€ λ£λλ€. - κ·Έλ μ§ μμ κ²½μ°μλ
dp[i-1][j]
μdp[i-1][j - stamina_consum[i]]
μget_pleasure[i]
κ° μ€ ν° κ±Έ μ§μ΄ λ£λλ€.
πΎ λλμ
- λ μ μκ³ λ¦¬μ¦μ νμ΄λ νμ΄λ ν·κ°λ¦°λ€.
- μκ³ λ¦¬μ¦μ μκ³ μ νμ΄λ μ΄λ ΅κ³ , κΉλ¨ΉμΌλ©΄ λ΅λ μλ κ² κ°λ€.
- λ μ μκ³ λ¦¬μ¦ λ¬Έμ λ₯Ό μ 리ν΄μ νμ΄λ΄μΌν κ² κ°λ€.
- λ¬Έμ νμ΄ ν΄μ€μ μ°λ©΄μλ ν·κ°λ €μ λ€μ μΈν°λ·μ λ³΄κ³ μ°Ύμμ μ΄ν΄νκ³ λ¬Έμ λ₯Ό ν΄μν΄μ μΌλ€.