๋ฐ์ํ
๐ค๋ฌธ์ ํด๊ฒฐ
-
G5 | DP, ๋ ์ ์๊ณ ๋ฆฌ์ฆ(๋ฐฐ๋ญ ์๊ณ ๋ฆฌ์ฆ)
๋ฑ ๋ด๋ ๋๋ฌด ๋ณต์กํด ๋ณด์ด๋ DP... 2์ฐจ์ ๋ฐฐ์ด๋ก ํ์ด์ผํ ๊ฒ ๊ฐ๋ค.
ํ์ ๊ฐ ์์ดํ , ์ด์ ํ์ฌ ๋ฌด๊ฒ(?)
- ์์ดํ ํ๋๋ฅผ ๊ณ ๋ฅธ๋ค.
- ๊ฐ๋ฐฉ์ ๋ฒํธ ์ ์๋ ๋ฌด๊ฒ๋ฅผ 0๋ถํฐ M๊น์ง ์ฌ๋ ค๋ณธ๋ค.
- ํด๋น ๋ฌด๊ฒ๋ณ๋ก ์ต๋๋ก ์ฑ์ธ ์ ์๋ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ฑ์ด๋ค.
์ฌ์ค ๊ทธ๋ ๊ฒ ๋ฑ!!! ์์ ํ ์ดํด๋ ํ์ง ๋ชปํ๋ค... ์ญ์ 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
๋ฐ์ํ
'Algorithm Problem > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] ๋ฐฑ์ค - 1012. ์ ๊ธฐ๋ ๋ฐฐ์ถ (0) | 2020.10.31 |
---|---|
[python] ๋ฐฑ์ค - 14719. ๋น๋ฌผ (0) | 2020.10.30 |
[python] ๋ฐฑ์ค - 1325. ํจ์จ์ ์ธ ํดํน (0) | 2020.10.28 |
[python] ๋ฐฑ์ค - 10773. ๊ดํธ (0) | 2020.10.27 |
[python] ๋ฐฑ์ค - 2512. ์์ฐ (0) | 2020.10.26 |