โ๋ฌธ์
https://www.acmicpc.net/problem/14501
๋ฉ๋ชจ๋ฆฌ: 32412 KB, ์๊ฐ: 36 ms
์๋ด์์ผ๋ก ์ผํ๊ณ ์๋ ๋ฐฑ์ค์ด๋ ํด์ฌ๋ฅผ ํ๋ ค๊ณ ํ๋ค.
์ค๋๋ถํฐ N+1์ผ์งธ ๋๋ ๋ ํด์ฌ๋ฅผ ํ๊ธฐ ์ํด์, ๋จ์ N์ผ ๋์ ์ต๋ํ ๋ง์ ์๋ด์ ํ๋ ค๊ณ ํ๋ค.
๋ฐฑ์ค์ด๋ ๋น์์๊ฒ ์ต๋ํ ๋ง์ ์๋ด์ ์ก์ผ๋ผ๊ณ ๋ถํ์ ํ๊ณ , ๋น์๋ ํ๋ฃจ์ ํ๋์ฉ ์๋ก ๋ค๋ฅธ ์ฌ๋์ ์๋ด์ ์ก์๋์๋ค.
๊ฐ๊ฐ์ ์๋ด์ ์๋ด์ ์๋ฃํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ๊ธฐ๊ฐ Ti์ ์๋ด์ ํ์ ๋ ๋ฐ์ ์ ์๋ ๊ธ์ก Pi๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
N = 7์ธ ๊ฒฝ์ฐ์ ๋ค์๊ณผ ๊ฐ์ ์๋ด ์ผ์ ํ๋ฅผ ๋ณด์.
1์ผ | 2์ผ | 3์ผ | 4์ผ | 5์ผ | 6์ผ | 7์ผ | |
Ti | 3 | 5 | 1 | 1 | 2 | 4 | 2 |
Pi | 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์ด๋ค.
์๋ด์ ์ ์ ํ ํ์ ๋, ๋ฐฑ์ค์ด๊ฐ ์ป์ ์ ์๋ ์ต๋ ์์ต์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
โ๐ปํ์ด
์ค๋๋ ์ง๋ก๋ถํฐ t๋งํผ ๋ํ ๋ ์ ์์ต์ด ์ผ๋ง์ธ์ง ๊ณ์ฐํ๋ค.
์์ ์ ๋์จ ํ ์คํธ์ผ์ด์ค 4๋ก ์ค๋ช ํ๊ฒ ๋ค.
1์ผ | 2์ผ | 3์ผ | 4์ผ | 5์ผ | 6์ผ | 7์ผ | 8์ผ | 9์ผ | 10์ผ | |
Ti | 5 | 4 | 3 | 2 | 1 | 1 | 2 | 3 | 4 | 5 |
Pi | 50 | 40 | 30 | 20 | 10 | 10 | 20 | 30 | 40 | 50 |
์ค๋์ด 1์ผ์ด๋ผ๋ฉด ์์ต์ 6์ผ์ ๊ธฐ๋กํ๋ค. ์ธ๋ฑ์ค๋ก ๋ณด๋ฉด dp[5]์ ์์ต์ ๊ธฐ๋กํ๋ฉด ๋๋ค. 2์ผ, 3์ผ, 4์ผ, 5์ผ์ T๋ฅผ ๋ํ๋ฉด ๋ชจ๋ 6์ผ์ ์๋ด์ด ์๋ฃ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ด๋ ๊ธฐ์กด dp[5]์ ๊ฐ๊ณผ ๋น๊ตํ์ฌ ์ต๋๊ฐ์ ๊ธฐ๋กํ๋ฉด ๋๋ค.
์ด์ 6์ผ์ ์๋ด์ด ์๋ฃ๋๋๋ฐ 1์ผ์ด ๊ฑธ๋ฆฌ๋ฏ๋ก 7์ผ์ ์์ต์ ๊ธฐ๋กํ๋ค. dp[6]์ dp[5]+10์ผ๋ก 60์ด 7์ผ ์ต๋ ์์ต์ด๋ค. 7์ผ์ ํ๋ ์๋ด์ 2์ผ์ด ๊ฑธ๋ฆฐ๋ค. ๊ทธ๋ฌ๋ฏ๋ก dp[8]์ ๊ธฐ๋กํ๋ค. dp[8]์ 80์ด ๋๋ค. ์ด์ 9์ผ์ ๋ณด๋ฉด ์๋ด์ด ์๋ฃ๋๋๋ฐ 4์ผ์ด ๊ฑธ๋ฆฐ๋ค. ๊ทธ๋ฐ๋ฐ ๋ฐฑ์ค์ด๋ 11์ผ์ ํด์ฌํ๋ฏ๋ก ์๋ด์ ์๋ฃํ ์ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก 9์ผ ์๋ด์ ์ก์ง ์๋๋ค.
๋ค์ 8์ผ๋ก ๋์๊ฐ์ 8์ผ์ ์๋ด์ ์ก์ผ๋ฉด ์๋ฃํ๋ ๋ฐ 3์ผ์ด ๊ฑธ๋ฆฐ๋ค. ๊ทธ๋ฌ๋ฏ๋ก 8์ผ์ ์ก์ ์๋ด์ ํด์ฌ ์ ์ ์๋ฃํ ์ ์๋ค. ๊ทธ๋ผ dp[10]์ dp[7]+30์ด ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ ๊ณผ์ ๋๋ก๋ง ํ๋ฉด ํ์ฌ dp[7]์ ์์ต์ด 0์ผ๋ก ๋์ด์๋ค. ๊ทธ๋ฌ๋ฏ๋ก dp[i]์ dp[i-1]์ ๋น๊ตํ์ฌ ์ต๋ ์์ต์ ๊ตฌํ๋ฉด ๋๋ค. ๊ทธ๋ฌ๋ฉด dp[7]์ dp[6]๊ณผ ๋น๊ตํ์ ๋ dp[6]์ 60์ผ๋ก dp[7]์ 60์ด ๋๊ณ dp[10]์ dp[7]+30์ผ๋ก 90์ด ๋์ด ๊ฒฐ๊ณผ์ ์ผ๋ก ์ต๋ ์์ต์ 90์ด๋ค.
๐ป์ฝ๋
import sys
input = sys.stdin.readline
N = int(input())
coun = [list(map(int, input().split())) for _ in range(N)]
dp=[0]*(N+1)
for i in range(N):
t, p = coun[i]
dp[i] = max(dp[i], dp[i - 1]) # i์ i-1์ ๋น๊ตํ์ฌ ์ต๋ ์์ต์ ๊ณ์ฐ.
if i+t <= N: # ์๋ด ์๋ฃ์ผ์ด ํด์ฌ์ผ์ ๋๊ธฐ์ง ์๋๋ค๋ฉด
dp[i+t] = max(dp[i+t], dp[i]+p) # ์๋ด ์๋ฃ์ผ์ ๋ฐ์ ์ ์๋ ์ต๋ ์์ต ๊ณ์ฐ.
print(max(dp))
๐ํ๊ธฐ
์ฒ์์๋ DFS๋ก ์ ๊ทผํ๋๋ฐ ์๊ฐํ๋ค๋ณด๋ DP๋ก ํ ์ ์์ ๊ฒ ๊ฐ๋ค๊ณ ์๊ฐํ๋ค. ์ผ๋จ ๊ทธ๋ ๊ฒ ์๊ฐํ๊ณ ํ์ด์ ๋ง๊ธด ํ์ง๋ง ์ด๋ ๊ฒ ํ์ด๋ ๊ด์ฐฎ์๊ฑด๊ฐ ์ถ์๋๋ฐ ๋ถ๋ฅ๋ณด๋๊น DP๋ผ๊ณ ๋์ด์์ด์ ์๋ชป ์ ๊ทผํ ๊ฑด ์๋ ๊ฒ ๊ฐ๋คใ ใ
PyPy3๋ก ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋นํ ๋จน๋๋ฐ ์ด๊ฒ ๋ง๋๊ฑธ๊น...
'Coding Test > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 14503. ๋ก๋ด ์ฒญ์๊ธฐ/Python - Gold5 (1) | 2025.07.29 |
---|---|
[๋ฐฑ์ค] 14891. ํฑ๋๋ฐํด/Python - Gold5 (2) | 2025.07.25 |
[SWEA] 2819. ๊ฒฉ์ํ์ ์ซ์ ์ด์ด๋ถ์ด๊ธฐ/Python - D4 (0) | 2025.07.22 |
[SWEA] 1242. ์ํธ์ฝ๋ ์ค์บ/Python - D5 (1) | 2025.07.21 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ต์์ง์ฌ๊ฐํ/Python - Lv.1 (0) | 2025.07.16 |