DevYoon

[๋ฐฑ์ค€] 1535. ์•ˆ๋…• (Python) ๋ณธ๋ฌธ

PS/Baekjoon

[๋ฐฑ์ค€] 1535. ์•ˆ๋…• (Python)

gimewn 2022. 5. 3. 18:39

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])