Algorithm Problem/Python

[python] ๋ฐฑ์ค€ - 12865. ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ

deo2kim 2020. 10. 29. 16:05
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

  • G5 | DP, ๋ƒ…์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜(๋ฐฐ๋‚ญ ์•Œ๊ณ ๋ฆฌ์ฆ˜)

๋”ฑ ๋ด๋„ ๋„ˆ๋ฌด ๋ณต์žกํ•ด ๋ณด์ด๋Š” DP... 2์ฐจ์› ๋ฐฐ์—ด๋กœ ํ’€์–ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค.

ํ–‰์€ ๊ฐ ์•„์ดํ…œ, ์—ด์€ ํ˜„์žฌ ๋ฌด๊ฒŒ(?)

  1. ์•„์ดํ…œ ํ•˜๋‚˜๋ฅผ ๊ณ ๋ฅธ๋‹ค.
  2. ๊ฐ€๋ฐฉ์˜ ๋ฒ„ํ‹ธ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ๋ฅผ 0๋ถ€ํ„ฐ M๊นŒ์ง€ ์˜ฌ๋ ค๋ณธ๋‹ค.
  3. ํ•ด๋‹น ๋ฌด๊ฒŒ๋ณ„๋กœ ์ตœ๋Œ€๋กœ ์ฑ„์šธ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ฑ„์šด๋‹ค.

์‚ฌ์‹ค ๊ทธ๋ ‡๊ฒŒ ๋”ฑ!!! ์™„์ „ํžˆ ์ดํ•ด๋Š” ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค... ์—ญ์‹œ DP๋Š” ์–ด๋ ค์›€

๋‚˜์ค‘์— ๋น„์Šทํ•œ ๋ฌธ์ œ๋ฅผ ํ•œ๋ฒˆ ๋” ํ’€๋ฉด ์ดํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š์„๊นŒ...

 

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

import sys

input = sys.stdin.readline
N, M = map(int, input().split())  # ๋ฌผํ’ˆ ์ˆ˜, ์ตœ๋Œ€ ๋ฌด๊ฒŒ
items = [tuple(map(int, input().split())) for _ in range(N)]
# print(items)

dp = [[0] * (M + 1) for _ in range(N + 1)]
# for row in dp:
#     print(row)
# print()

for item_idx in range(1, N + 1):
    for weight in range(1, M + 1):
        item_weight, item_value = items[item_idx - 1]
        
        # ๊ณ„์‚ฐ๋‹จ๊ณ„์˜ ๋ฌด๊ฒŒ๊ฐ€ ๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ๋ณด๋‹ค ์ž‘์•„์„œ ์•„์ง ํ•ด๋‹น ๋‹จ๊ณ„์˜ ๋ฌผ๊ฑด์„ ๋ชป๋„ฃ์Œ
        if weight < item_weight:
            dp[item_idx][weight] = dp[item_idx - 1][weight]
        else:
            dp[item_idx][weight] = max(dp[item_idx - 1][weight], dp[item_idx - 1][weight - item_weight] + item_value)

        # for row in dp:
        #     print(row)
        # print()

print(dp[-1][-1])

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

์ถœ์ฒ˜: BACKJOON ONLINE JUDGE

๋งํฌ: https://www.acmicpc.net/problem/12865

 

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

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

www.acmicpc.net

 

๋ฐ˜์‘ํ˜•