ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

12865๋ฒˆ: ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ

์ฒซ ์ค„์— ๋ฌผํ’ˆ์˜ ์ˆ˜ N(1 โ‰ค N โ‰ค 100)๊ณผ ์ค€์„œ๊ฐ€ ๋ฒ„ํ‹ธ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ K(1 โ‰ค K โ‰ค 100,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฑฐ์ณ ๊ฐ ๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ W(1 โ‰ค W โ‰ค 100,000)์™€ ํ•ด๋‹น ๋ฌผ๊ฑด์˜ ๊ฐ€์น˜ V(0 โ‰ค V โ‰ค 1,000)

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

  • ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ, list[์„ ํƒํ•˜๊ณ ์ž ํ•˜๋Š” ์•„์ดํ…œ์˜ ์ˆ˜][์ตœ๋Œ€ ๊ฐ€์น˜]๋กœ 2์ฐจ์› ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค.
  • list[0]์€ ์•„๋ฌด๊ฒƒ๋„ ์—ฐ์ฃผํ•˜์ง€ ์•Š์€ ์ƒํƒœ, ์ตœ์ดˆ์— ๋ณผ๋ฅจ์„ ์ ์šฉํ•œ ์ƒํƒœ์ด๋ฏ€๋กœ list[0]์˜ ๊ฐ’๋“ค์€ 0์ด๋‹ค.
  • 2์ค‘ ๋ฐ˜๋ณต๋ฌธ์„ ์ˆœํšŒํ•˜๋ฉด์„œ list[1], list[2] ... ๋กœ ์ ‘๊ทผํ•˜๋ฉฐ ๊ฐ€๋ฐฉ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ์•„์ดํ…œ์˜ ์ƒํƒœ๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.
  • n * m ๋งŒํผ์˜ ๋ฐ˜๋ณต๋ฌธ์„ ์ˆœํšŒํ•˜๋ฉด, ์ตœ๋Œ€ ๊ฐ’์–ด์น˜์„ ์ฒดํฌํ•œ๋‹ค.
  • ์ฆ‰, ์ด์ „์— ์„ ํƒํ•œ ์•„์ดํ…œ์˜ ๊ฐ’์–ด์น˜๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ, ํ˜„์žฌ ์„ ํƒํ•œ ์•„์ดํ…œ์„ ๋‹ด์•˜์„ ๋•Œ์˜ ์ƒํƒœ๋ฅผ ๋ฐ˜์˜ํ•œ๋‹ค.
    • ์•„์ดํ…œ์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š”๊ฐ€?, ๊ฐ’์–ด์น˜๋Š” ์ด์ „๊ณผ ๋น„๊ตํ•˜์—ฌ ์–ด๋Š๊ฒƒ์„ ์„ ํƒํ•˜๋Š”๊ฒŒ ์ตœ๋Œ€๊ฐ’์ธ๊ฐ€?
  • ๋”ฐ๋ผ์„œ ์ ํ™”์‹์€ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด, ํ˜„์žฌ ์•„์ดํ…œ์„ ๊ฐ€๋ฐฉ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์— ํ•ด๋‹น ์•„์ดํ…œ์˜ ๊ฐ’์–ด์น˜๋ฅผ ๋ฐ˜์˜ํ•˜๋Š”๊ฐ€? ์•„๋‹Œ๊ฐ€์— ๋”ฐ๋ผ ์ตœ๋Œ€๊ฐ’์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

์ฝ”๋“œ

from sys import stdin


if __name__ == "__main__":
    n, k = map(int, stdin.readline().split())
    items = [[0, 0]] + [list(map(int, stdin.readline().split())) for _ in range(n)]
    dp = [[0] * (k + 1) for _ in range(n + 1)]

    for idx in range(1, n + 1):
        weight, value = items[idx]
        for bag_weight in range(1, k + 1):
            if bag_weight < weight:
                dp[idx][bag_weight] = dp[idx - 1][bag_weight]
            else:
                dp[idx][bag_weight] = \
                    max(dp[idx - 1][bag_weight - weight] + value, dp[idx - 1][bag_weight])

    print(dp[n][k])

 

728x90
๋ฐ˜์‘ํ˜•
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€