ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
15486๋ฒ: ํด์ฌ 2
์ฒซ์งธ ์ค์ N (1 ≤ N ≤ 1,500,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ Ti์ Pi๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด์ ์ฃผ์ด์ง๋ฉฐ, 1์ผ๋ถํฐ N์ผ๊น์ง ์์๋๋ก ์ฃผ์ด์ง๋ค. (1 ≤ Ti ≤ 50, 1 ≤ Pi ≤ 1,000)
www.acmicpc.net
๋ฌธ์ ํ์ด
๊ธฐ์กด์ ํ์๋ ํด์ฌ ๋ฌธ์ ์์ N์ ๋ฒ์๊ฐ ์ปค์ง ๋ฌธ์ ์ด๋ค. N์ ๋ฒ์๊ฐ ์ปค์ง์ ๋ฐ๋ผ DFS๋ก ํ์ง ์๊ณ DP๋ก ํ์ด์ผ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ์ฆ ์ต๋ ์์ต์ ์์ ํ์์ ํตํด ์ฐพ์ง ์๊ณ , ๋ฉ๋ชจ์ด์ ์ด์ ์ ํตํด ๊ฐ์ ๋์ ์์ผ๊ฐ๋ฉฐ N์ผ ๊น์ง ์งํ์์ผ์ผ ํ๋ค.
์ ํ์์ ํ์ฌ ๋ ์ง + ์ผํ๋๋ฐ ํ์ํ ๋ ์ง <= N์ธ ๊ฒฝ์ฐ์, ํด๋น ์ผ์์ ์์ต์ด ๊ธฐ์กด์ ๊ฐ๊ณผ ๋น๊ตํ์ฌ ์ผ์ ํ๋ ๊ฒ์ด ์ด๋์ธ์ง๋ฅผ ๊ณ์ฐํด ์ฃผ๋ฉด ๋๋ค
์ฝ๋
from sys import stdin
if __name__ == "__main__":
n = int(stdin.readline())
dp = [0] * (n + 1)
schedule = [list(map(int, stdin.readline().split())) for _ in range(n)]
for cur_day in range(n):
spend_day, pay = schedule[cur_day]
if cur_day + spend_day <= n:
dp[cur_day + spend_day] = \
max(dp[cur_day + spend_day], dp[cur_day] + pay)
dp[cur_day + 1] = max(dp[cur_day + 1], dp[cur_day])
print(dp[n])
`dp[n]`์ ์ต๋ ์์ต์ ๋ฐ์ํ๊ธฐ ์ํด, `dp[cur_day + 1] = max(dp[cur_day + 1], dp[cur_day])`๊ฐ ํ์ํ๋ค.
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 2468 ์์ ์์ญ (0) | 2020.09.01 |
---|---|
๋ฐฑ์ค: 10942 ํฐ๋ฆฐ๋๋กฌ? (0) | 2020.08.30 |
๋ฐฑ์ค: 5557 1ํ๋ (0) | 2020.08.29 |
๋ฐฑ์ค: 12865 ํ๋ฒํ ๋ฐฐ๋ญ (0) | 2020.08.28 |
๋ฐฑ์ค: 1495 ๊ธฐํ๋ฆฌ์คํธ (0) | 2020.08.27 |