λ¬Έμ
β1 N κΉμ§μ λ²νΈκ° λΆμ΄μλ N κ°μ λ°°μλκ° μλ€. i λ² λ°°μλμμλ i λ² μμμ λ°°μλ°μ μ μλ€. M λͺ μ νμλ€μ΄ μμμ λ°κΈ° μν΄ μ€μ μ°λ€.
λΆν°κ° νμμ νΉμ μμμ λ°°μλ°μ μ μκ³ , λ°°μλ°μ μμμ ν΄λΉνλ λ§νΌ ν볡λκ° μμΉνλ€. ꡬ체μ μΈ κ·μΉμ λ€μκ³Ό κ°λ€.
- βj pj,1,pj,2,β―,pj,lj κ° μ ν΄μ Έ μλ€. κ° νμμ κ°μ μμμ μ΅λ ν λ²λ§ λ°°μλ°μ μ μλ€. λ² νμμ λ°°μλ°μ μ μλ μμμ λ²νΈ
- βj pj,k λ² μμμ λ°°μλ°μ κ²½μ° νμμ ν볡λκ° vj,k λ§νΌ μμΉνλ€. λ² νμμ΄
- βj j+1 λ² νμμ΄ λ°°μλ°μ μ μλ€. (1≤j≤M−1) β λ² νμμ΄ λ°°μλ°μ μμμ
μ΄κΈ°μ λͺ¨λ νμμ ν볡λλ 0 μ΄λ€. νμλ€μ ν볡λ ν©μ΄ μ΅λκ° λλλ‘ λ°°μμ μ§νν΄ λ³΄μ!
μ λ ₯
첫 λ²μ§Έ μ€μ λ μ μ N κ³Ό M μ΄ κ³΅λ°±μΌλ‘ ꡬλΆλμ΄ μ£Όμ΄μ§λ€. (1≤N,M≤105) β
μ΄ν κ° νμμ΄ λ¨Ήμ μ μλ μμμ λν μ λ³΄κ° M κ°μ μ€μ κ±Έμ³ μ£Όμ΄μ§λ€.
μ 보μ j λ²μ§Έ μ€μλ j λ² νμμ΄ λ¨Ήμ μ μλ μμμ κ°μλ₯Ό λνλ΄λ μ μ lj κ° κ°μ₯ λ¨Όμ μ£Όμ΄μ§κ³ , μ΄ν 2lj κ°μ μ μ pj,1,vj,1,pj,2,vj,2,β―,pj,lj,vj,lj κ° κ³΅λ°±μΌλ‘ ꡬλΆλμ΄ μ£Όμ΄μ§λ€. μ΄λ pj,k λ μ¦κ°νλ μμλ‘ μ£Όμ΄μ§λ€. (1≤j≤M; 1≤lj≤N; 1≤pj,1<pj,2<β―<pj,lj≤N; 1≤vj,k≤109) β
λͺ¨λ lj μ ν©μ 105 μ λμ§ μλλ€.
μΆλ ₯
νμλ€μ ν볡λ ν©μ μ΅λκ°μ μΆλ ₯νλ€.
μμ μ λ ₯ 1 볡μ¬
5 5
2 1 5 2 6
1 2 5
1 3 5
1 4 5
1 5 5
μμ μΆλ ₯ 1 볡μ¬
26
β1 1 , 2 λ² μμμ λ°°μλ°κ³ , 3 , 4 , 5 λ² νμμ΄ κ°κ° 3 , 4 , 5 λ² μμμ λ°°μλ°μΌλ©΄, νμλ€μ ν볡λμ ν©μ (5+6)+0+5+5+5=26 μ΄ λλ€. μ΄ λ°©λ²λ³΄λ€ ν볡λμ ν©μ ν¬κ² ν μ μλ λ°©λ²μ μμΌλ―λ‘, λ΅μ 26 μ΄ λλ€.
λ² νμμ΄# νμ΄ λ°©λ²
- food_list[p]: μμ pλ₯Ό μνλ (νμ λ²νΈ, λ§μ‘±λ) 리μ€νΈ
- κ° μμμ λν΄, κ·Έ μμμ μνλ νμλ€μ μμλλ‘ λ³΄λ©΄μ:
- νμ¬ νμμ΄ μ΄μ νμ λ°λ‘ λ€μμ΄λΌλ©΄→ μ΄μ -μ΄μ κΉμ§μ μ΅λκ° + νμ¬ λ§μ‘±λμ λΉκ΅ν΄μ λ ν° κ° μ ν
- → μ°μλ λ νμμ΄λ―λ‘ κ°μ΄ λ¨Ήμ μ μμ
- κ·Έ μΈμ κ²½μ° (μ°μ μλ)
- → κ·Έλ₯ μ΄μ κΉμ§μ μ΅λ λ§μ‘±λμ νμ¬ λ§μ‘±λλ₯Ό λν¨
- μ¦, μμλ³λ‘ μ΅λ λ§μ‘±λ ν©μ ꡬνλ DPλ₯Ό μν
- μ΅μ’ μ μΌλ‘, λͺ¨λ μμμ μ΅λ λμ λ§μ‘±λ ν©μ λνλ©΄ μ λ΅
→ dpλ¬Έμ νΈλκ±° μ¬μ ν μ΅μνμ§ μμ π₯²
# μ½λ
import sys
sys.stdin = open("input.txt","r")
n, m = map(int, sys.stdin.readline().split())
food_list = [[] for _ in range(n+1)] # μμλ³λ‘ (νμλ²νΈ, λ§μ‘±λ) μ μ₯
hpy_dp = [[] for _ in range(n+1)] # λμ ν볡μ§μ μ μ₯
for i in range(1, m+1): # λͺ¨λ νμ
tmp = list(map(int,sys.stdin.readline().split()))
for j in range(tmp[0]):
food = tmp[2*j+1]
hpy = tmp[2*j+2]
food_list[food].append((i,hpy))
result_hpy = 0
for food in range(1,n+1):
# μμμ λ¨Ήμ μ μλ νμμ΄ μλ κ²½μ°
if len(food_list[food]) == 0: continue
hpy_dp[food].append(0)
hpy_dp[food].append(food_list[food][0][1]) # 첫λ²μ§Έ νμμ λ§μ‘±λ μ μ₯
for i in range(1, len(food_list[food])):
curr_stu, curr_hpy = food_list[food][i]
pre_stu, _ = food_list[food][i-1]
hpy_dp[food].append(hpy_dp[food][-1]+curr_hpy)
# μ§μ νμμ΄ μ΄ μμ λ°°μ λ°μμΌλ©΄ μμ ν΄μΌ ν¨
if pre_stu + 1 == curr_stu:
tmp_hpy = hpy_dp[food][-3] + curr_hpy
if hpy_dp[food][-2] < tmp_hpy:
hpy_dp[food][-1] = tmp_hpy
else:
hpy_dp[food][-1] = hpy_dp[food][-2]
result_hpy += hpy_dp[food][-1]
print(result_hpy)
# μ°Έκ³
μλ 쑰건μ μμ 무μνκ³ νΌ μ½λ..
(1) κ°μ μμμ μ¬λ¬λͺ μ΄ λ°°μλ°μ μ μλκ±°
(2) jλ² νμμ΄ λ°°μλ°μ μμμ j+1λ² νμμ΄ λ°°μλ°μ μ μλ
import sys
sys.stdin = open("input.txt","r")
n, m = map(int,sys.stdin.readline().split()) # n: λ°°μλ, m: νμ μ
food = [0] * (n+1)
for _ in range(m):
s = list(map(int,sys.stdin.readline().split()))
for i in range(s[0]): # μμμ κΈΈμ΄λ§νΌ λ°λ³΅λ¬Έ λκΈ°
j = 2 * i + 1
# s[j]: μμ μ΄λ¦ / s[j+1]: λ§μ‘±λ
if food[s[j]] < s[j+1]:
food[s[j]] = s[j+1]
print(sum(food))
'π Study > Baekjoon' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Gold V] 16719 - ZOAC (0) | 2025.05.12 |
---|---|
[Silver I] 1495 - κΈ°ν리μ€νΈ (0) | 2025.05.11 |
[Gold V] 1931 - νμμ€ λ°°μ (0) | 2025.05.10 |
[Gold V] 20207 - λ¬λ ₯ (0) | 2025.05.09 |
[Silver II] 15787 - κΈ°μ°¨κ° μ΄λ μ ν€μΉκ³ μνμλ₯Ό (0) | 2025.05.08 |