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 ์ ์ฅ
- 1์ผ์ฐจ์ ์ผํ๋ฉด 4์ผ์ฐจ์ ์๋ด์ด ์ข
๋ฃ๋๋ฏ๋ก, DP[4]์ ๊ฐ์ ๊ฐฑ์ ํ ์ ์๋ค.
- 2์ผ์ฐจ
- 2์ผ์ฐจ์ ์ผํ๋ฉด 7์ผ์ฐจ์ ์๋ด์ด ์ข
๋ฃ๋๋ฏ๋ก, DP[7]์ ๊ฐ์ ๊ฐฑ์ ํ ์ ์๋ค.
- curMax๋ 0์ด๊ณ , P[2]=20์ด๋ฏ๋ก DP[7]์ 20 ์ ์ฅ
- 2์ผ์ฐจ์ ์ผํ๋ฉด 7์ผ์ฐจ์ ์๋ด์ด ์ข
๋ฃ๋๋ฏ๋ก, DP[7]์ ๊ฐ์ ๊ฐฑ์ ํ ์ ์๋ค.
- 3์ผ์ฐจ
- 3์ผ์ฐจ์ ์ผํ๋ฉด 4์ผ์ฐจ์ ์๋ด์ด ์ข
๋ฃ๋๋ฏ๋ก, DP[4]์ ๊ฐ์ ๊ฐฑ์ ํ ์ ์๋ค.
- curMax๋ 0์ด๊ณ , P[3]=10์ด๋ฏ๋ก curMax+P[i]๋ 10์ด์ง๋ง, ํ์ฌ DP[4]๊ฐ 10์ ๊ฐ์ ๊ฐ์ง๋ฏ๋ก ๊ฐ์ด ๊ฐฑ์ ๋์ง๋ ์๋๋ค.
- 3์ผ์ฐจ์ ์ผํ๋ฉด 4์ผ์ฐจ์ ์๋ด์ด ์ข
๋ฃ๋๋ฏ๋ก, DP[4]์ ๊ฐ์ ๊ฐฑ์ ํ ์ ์๋ค.
- 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์ ๋์ด๊ฐ๊ธฐ ๋๋ฌธ์ ๊ณ์ฐํ ์ ์๋ค.
- 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))
'์๊ณ ๋ฆฌ์ฆ > DP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 2579 ๐ฅ] ๊ณ๋จ ์ค๋ฅด๊ธฐ (0) | 2023.11.02 |
---|---|
[๋ฐฑ์ค 1463 ๐ฅ] 1๋ก ๋ง๋ค๊ธฐ (0) | 2023.11.02 |
[๋ฐฑ์ค 1520 ๐ฅ] ๋ด๋ฆฌ๋ง ๊ธธ (0) | 2023.08.30 |
[๋ฐฑ์ค 1563 ๐ฅ] ๊ฐ๊ทผ์ (0) | 2023.08.24 |
[๋ฐฑ์ค 1351 ๐ฅ] ๋ฌดํ ์์ด (0) | 2023.08.21 |