DevYoon
[๋ฐฑ์ค] 1535. ์๋ (Python) ๋ณธ๋ฌธ
link ๐ https://www.acmicpc.net/problem/1535
โ๏ธ 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])