ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
๊ธฐ์กด์ ํ์๋ ํด์ฌ ๋ฌธ์ ์์ 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])`๊ฐ ํ์ํ๋ค.
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 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 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ