DevYoon
[๋ฐฑ์ค] 1535. ์๋ (Python) ๋ณธ๋ฌธ
link ๐ https://www.acmicpc.net/problem/1535
1535๋ฒ: ์๋
์ฒซ์งธ ์ค์ ์ฌ๋์ ์ N(≤ 20)์ด ๋ค์ด์จ๋ค. ๋์งธ ์ค์๋ ๊ฐ๊ฐ์ ์ฌ๋์๊ฒ ์ธ์ฌ๋ฅผ ํ ๋, ์๋ ์ฒด๋ ฅ์ด 1๋ฒ ์ฌ๋๋ถํฐ ์์๋๋ก ๋ค์ด์ค๊ณ , ์ ์งธ ์ค์๋ ๊ฐ๊ฐ์ ์ฌ๋์๊ฒ ์ธ์ฌ๋ฅผ ํ ๋, ์ป๋ ๊ธฐ์จ์ด 1๋ฒ
www.acmicpc.net
โ๏ธ DP ์๊ณ ๋ฆฌ์ฆ
- ์ ํ๋ฆฌ์ง ์์์ ๊ณ ์ ํ๋ค๊ฐ, ์ ์ ๋ฆฌ๋ ๊ธ(https://gsmesie692.tistory.com/113)์ ๋ฐ๊ฒฌํ์ฌ ์ฐธ๊ณ ํ ์ ์์๋ค.
- 2์ฐจ์ ๋ฐฐ์ด๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ฐ, ์ฒด๋ ฅ์ด j๋ณด๋ค ์์ผ๋ฉด ์ฐ๋ฝ ๋ถ๊ฐ๋ฅํ๋ฏ๋ก ์ ๋ฐฐ์ด์ ๊ฐ์ ๊ฐ์ ธ์ค๊ณ
- ์ฒด๋ ฅ์ด j๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด ์๋ก์ด ๊ฐ๊ณผ ์ ๋ฐฐ์ด์ ๊ฐ์ max ๋น๊ตํ๋ค.
- ์ด๋, j-power[i]๋ ์์ ์ฐ๋ฝ์ ์ทจํด ๊ธฐ์จ์ ์ป์์ ๊ฒฝ์ฐ ๊ทธ ๊ธฐ์จ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด๋ค.
N = int(input())
power = [0]+list(map(int, input().split()))
joy = [0]+list(map(int, input().split()))
DP = [[0]*100 for _ in range(N+1)]
for i in range(1, N+1):
for j in range(100):
if power[i] > j: # j๊ฐ ์ฒด๋ ฅ๋ณด๋ค ์์ผ๋ฉด ์ฐ๋ฝ ๋ถ๊ฐ๋ฅ
DP[i][j] = DP[i-1][j] # ์์ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
else: # j๊ฐ ์ฒด๋ ฅ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด ์ฐ๋ฝ ๊ฐ๋ฅ
DP[i][j] = max(DP[i-1][j-power[i]]+joy[i], DP[i-1][j]) # ์๋ก์ด ๊ฐ vs ์์ ๊ฐ
print(DP[N][-1])