์•Œ๊ณ ๋ฆฌ์ฆ˜/DP

[๋ฐฑ์ค€ 15486 ๐Ÿฅ‡] ํ‡ด์‚ฌ 2

1eehyunji 2023. 9. 24. 01:15

https://www.acmicpc.net/problem/15486

 

15486๋ฒˆ: ํ‡ด์‚ฌ 2

์ฒซ์งธ ์ค„์— N (1 ≤ N ≤ 1,500,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— Ti์™€ Pi๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด์„œ ์ฃผ์–ด์ง€๋ฉฐ, 1์ผ๋ถ€ํ„ฐ N์ผ๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Ti ≤ 50, 1 ≤ Pi ≤ 1,000)

www.acmicpc.net

๋ฌธ์ œ

์ƒ๋‹ด์›์œผ๋กœ ์ผํ•˜๊ณ  ์žˆ๋Š” ๋ฐฑ์ค€์ด๋Š” ํ‡ด์‚ฌ๋ฅผ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

์˜ค๋Š˜๋ถ€ํ„ฐ N+1์ผ์งธ ๋˜๋Š” ๋‚  ํ‡ด์‚ฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ, ๋‚จ์€ N์ผ ๋™์•ˆ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์ƒ๋‹ด์„ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

๋ฐฑ์ค€์ด๋Š” ๋น„์„œ์—๊ฒŒ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์ƒ๋‹ด์„ ์žก์œผ๋ผ๊ณ  ๋ถ€ํƒ์„ ํ–ˆ๊ณ , ๋น„์„œ๋Š” ํ•˜๋ฃจ์— ํ•˜๋‚˜์”ฉ ์„œ๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ƒ๋‹ด์„ ์žก์•„๋†“์•˜๋‹ค.

๊ฐ๊ฐ์˜ ์ƒ๋‹ด์€ ์ƒ๋‹ด์„ ์™„๋ฃŒํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ๊ธฐ๊ฐ„ Ti์™€ ์ƒ๋‹ด์„ ํ–ˆ์„ ๋•Œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ธˆ์•ก Pi๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

N = 7์ธ ๊ฒฝ์šฐ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒ๋‹ด ์ผ์ •ํ‘œ๋ฅผ ๋ณด์ž.


3 5 1 1 2 4 2
10 20 10 20 15 40 200

1์ผ์— ์žกํ˜€์žˆ๋Š” ์ƒ๋‹ด์€ ์ด 3์ผ์ด ๊ฑธ๋ฆฌ๋ฉฐ, ์ƒ๋‹ดํ–ˆ์„ ๋•Œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ธˆ์•ก์€ 10์ด๋‹ค. 5์ผ์— ์žกํ˜€์žˆ๋Š” ์ƒ๋‹ด์€ ์ด 2์ผ์ด ๊ฑธ๋ฆฌ๋ฉฐ, ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ธˆ์•ก์€ 15์ด๋‹ค.

์ƒ๋‹ด์„ ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ธฐ๊ฐ„์€ 1์ผ๋ณด๋‹ค ํด ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ชจ๋“  ์ƒ๋‹ด์„ ํ•  ์ˆ˜๋Š” ์—†๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ 1์ผ์— ์ƒ๋‹ด์„ ํ•˜๊ฒŒ ๋˜๋ฉด, 2์ผ, 3์ผ์— ์žˆ๋Š” ์ƒ๋‹ด์€ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. 2์ผ์— ์žˆ๋Š” ์ƒ๋‹ด์„ ํ•˜๊ฒŒ ๋˜๋ฉด, 3, 4, 5, 6์ผ์— ์žกํ˜€์žˆ๋Š” ์ƒ๋‹ด์€ ํ•  ์ˆ˜ ์—†๋‹ค.

๋˜ํ•œ, N+1์ผ์งธ์—๋Š” ํšŒ์‚ฌ์— ์—†๊ธฐ ๋•Œ๋ฌธ์—, 6, 7์ผ์— ์žˆ๋Š” ์ƒ๋‹ด์„ ํ•  ์ˆ˜ ์—†๋‹ค.

ํ‡ด์‚ฌ ์ „์— ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ๋‹ด์˜ ์ตœ๋Œ€ ์ด์ต์€ 1์ผ, 4์ผ, 5์ผ์— ์žˆ๋Š” ์ƒ๋‹ด์„ ํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, ์ด๋•Œ์˜ ์ด์ต์€ 10+20+15=45์ด๋‹ค.

์ƒ๋‹ด์„ ์ ์ ˆํžˆ ํ–ˆ์„ ๋•Œ, ๋ฐฑ์ค€์ด๊ฐ€ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ˆ˜์ต์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N (1 ≤ N ≤ 1,500,000)์ด ์ฃผ์–ด์ง„๋‹ค.

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— Ti์™€ Pi๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด์„œ ์ฃผ์–ด์ง€๋ฉฐ, 1์ผ๋ถ€ํ„ฐ N์ผ๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Ti ≤ 50, 1 ≤ Pi ≤ 1,000)

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋ฐฑ์ค€์ด๊ฐ€ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ด์ต์„ ์ถœ๋ ฅํ•œ๋‹ค.

๋ฌธ์ œ ํ’€์ด

  • N์˜ ์ตœ๋Œ“๊ฐ’์ด 1,500,000์ด๋ผ ์™„์ „ ํƒ์ƒ‰์œผ๋กœ๋Š” ํ’€ ์ˆ˜ ์—†๋‹ค!
  • DP๋ฅผ ์ด์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค.
  • DP[n]์€ ํ•ด๋‹น ์‹œ์ ์—์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ˆ˜์ต์„ ์˜๋ฏธํ•˜์ง€๋งŒ, ์ฃผ์˜ํ•  ์ ์€ n-1์ผ๊นŒ์ง€ ์ผํ–ˆ์„ ๋•Œ์˜ ์ตœ๋Œ€ ์ˆ˜์ต์ด๋‹ค.
  • curMax ๋ณ€์ˆ˜์— ํ•ด๋‹น ์‹œ์ ์„ ๊ธฐ์ค€์œผ๋กœ ์ด์ „ DP ๊ฐ’๋“ค ์ค‘์— ๊ฐ€์žฅ ํฐ ์ˆ˜์ต์„ ์ €์žฅํ•œ๋‹ค. 
    • ํ•ด๋‹น ์‹œ์  ์ด์ „์— ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ˆ˜์ต๊ณผ ํ˜„์žฌ ์‹œ์ ์˜ ์ƒ๋‹ด์„ ์‹œ์ž‘ํ•ด์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ด์ต์„ DP[์ •์‚ฐ์ผ]์— ๊ฐฑ์‹ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
  • ๋ฌธ์ œ์—์„œ์˜ ์˜ˆ์ œ 1๋ฒˆ์„ ์ด์šฉํ•ด์„œ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • 1์ผ์ฐจ
      • 1์ผ์ฐจ์— ์ผํ•˜๋ฉด 4์ผ์ฐจ์— ์ƒ๋‹ด์ด ์ข…๋ฃŒ๋˜๋ฏ€๋กœ, DP[4]์˜ ๊ฐ’์„ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.
        • curMax๋Š” 0์ด๊ณ , P[1]=10์ด๋ฏ€๋กœ, DP[4]=max(DP[4], curMax+P[1])=>10 ์ €์žฅ
    • 2์ผ์ฐจ
      • 2์ผ์ฐจ์— ์ผํ•˜๋ฉด 7์ผ์ฐจ์— ์ƒ๋‹ด์ด ์ข…๋ฃŒ๋˜๋ฏ€๋กœ, DP[7]์˜ ๊ฐ’์„ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.
        • curMax๋Š” 0์ด๊ณ , P[2]=20์ด๋ฏ€๋กœ DP[7]์— 20 ์ €์žฅ
    • 3์ผ์ฐจ
      • 3์ผ์ฐจ์— ์ผํ•˜๋ฉด 4์ผ์ฐจ์— ์ƒ๋‹ด์ด ์ข…๋ฃŒ๋˜๋ฏ€๋กœ, DP[4]์˜ ๊ฐ’์„ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.
        • curMax๋Š” 0์ด๊ณ , P[3]=10์ด๋ฏ€๋กœ curMax+P[i]๋Š” 10์ด์ง€๋งŒ, ํ˜„์žฌ DP[4]๊ฐ€ 10์˜ ๊ฐ’์„ ๊ฐ€์ง€๋ฏ€๋กœ ๊ฐ’์ด ๊ฐฑ์‹ ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.
    • 4์ผ์ฐจ
      • 4์ผ์ฐจ์—๋Š” 10๋งŒํผ์˜ ์ˆ˜์ต์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ณ„์‚ฐ๋˜์–ด ์žˆ๋‹ค. ์ด์ œ curMax์˜ ๊ฐ’์ด ๊ฐฑ์‹ ๋˜์–ด 10์ด ์ €์žฅ๋œ๋‹ค.
      • 4์ผ์ฐจ์— ์ผํ•˜๋ฉด 5์ผ์ฐจ์— ์ƒ๋‹ด์ด ์ข…๋ฃŒ๋˜๋ฏ€๋กœ, DP[5]์˜ ๊ฐ’์„ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.
        • curMax์€ 10์ด๊ณ , P[4]=20์ด๋ฏ€๋กœ DP[5]=10+20=30 ์ €์žฅ
    • 5์ผ์ฐจ
      • 5์ผ์ฐจ์—๋Š” 30๋งŒํผ์˜ ์ˆ˜์ต์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ณ„์‚ฐ๋˜์–ด ์žˆ๋‹ค. curMax์˜ ๊ฐ’์„ 10์—์„œ 30์œผ๋กœ ๊ฐฑ์‹ ํ•ด์ค€๋‹ค.
      • 5์ผ์ฐจ์— ์ผํ•˜๋ฉด 7์ผ์ฐจ์— ์ƒ๋‹ด์ด ์ข…๋ฃŒ๋˜๋ฏ€๋กœ, DP[7]์˜ ๊ฐ’์„ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.
        • curMax๊ฐ€ 30์ด๊ณ , P[5]๊ฐ€ 15์ด๋ฏ€๋กœ DP[7]=max(20, 30+15)=45 ์ €์žฅ
    • 6์ผ์ฐจ
      • 6์ผ์ฐจ์—๋Š” 6+T[6]์ด 10์œผ๋กœ N+1์„ ๋„˜์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์‚ฐํ•  ์ˆ˜ ์—†๋‹ค. 
    • 7์ผ์ฐจ
      • 7์ผ์ฐจ์—๋„ 7+T[7]์ด 9๋กœ N+1์„ ๋„˜์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์‚ฐํ•  ์ˆ˜ ์—†๋‹ค.
  • ์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์ณ DP ๋ฐฐ์—ด์— ์ €์žฅ๋œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.
    • ํ’€์ดํ•˜๋ฉด์„œ ๊นจ๋‹ฌ์€ ๊ฒƒ์ธ๋ฐ ์œ„์—์„œ ๊ณ„์† DP ๊ฐ’ ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ curMax์— ์ €์žฅํ•ด์คฌ์œผ๋ฏ€๋กœ, ๊ตณ์ด max ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๋‚ญ๋น„ํ•˜์ง€ ๋ง๊ณ  curMax ๊ฐ’์„ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 
    • ๋” ์ƒ๊ฐํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ž!! ใ… ใ… 
import sys

n=int(sys.stdin.readline())
T=[0]
P=[0]
# DP[n] => n-1์ผ์งธ๊นŒ์ง€ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๊ธˆ์•ก
DP=[0]*(n+2)
for idx in range(n):
    t,p=map(int, sys.stdin.readline().strip().split(' '))
    T.append(t)
    P.append(p)

curMax=0
for i in range(1,n+1):
    # ์ •์‚ฐ์ผ
    payday=i+T[i]
    # ํ˜„์žฌ๊นŒ์ง€ ๊ฐ€์žฅ ํฐ ๊ฐ’์ด ๋ช‡์ธ์ง€ ๊ฐฑ์‹  (ํ˜„์žฌ ์ธ๋ฑ์Šค์˜ ๊ฐ’์ด ๊ฐ€์žฅ ํฐ ๊ฐ’์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, payday DP ๊ฐฑ์‹  ์ „์— curMax๋ฅผ ๊ฐฑ์‹ ํ•ด์ค€๋‹ค)
    curMax=max(curMax, DP[i])
    if payday<=n+1:
        # N+1์ผ์งธ ๋˜๋Š” ๋‚ ๊นŒ์ง€ ์ •์‚ฐ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๋‚ ์งœ์˜ DP ๊ฐ’ ๊ฐฑ์‹ 
        DP[payday]=max(DP[payday], curMax+P[i])

print(max(DP))