
๐ค๋ฌธ์ ํด๊ฒฐ
-
D3 | DP( Knapsack )
๐จ ๋ ์์๊ณ ๋ฆฌ์ฆ
๐จ ๊ฐ ์์ดํ ์ ๋ํด์ ๊ฐ๋ฐฉ์ ํฌ๊ธฐ๋ฅผ 0๋ถํฐ 1์ฉ ์ต๋๋ฌด๊ฒ๊น์ง ๋๋ ค๊ฐ๋ฉฐ ๊ณ์ฐ.
๐จ ๊ฐ๋ฐฉ์ ํฌ๊ธฐ๊ฐ ํด๋น ์์ดํ ์ ๋ฌด๊ฒ๋ณด๋ค ์์ผ๋ฉด ์์ดํ ์ ๋ฃ์ง ๋ชปํ๋ค. ์ด์ ๊น์ง์ ๋ฌด๊ฒ์ ๊ฐ์น ์ ์ฉ
๐จ ๊ฐ๋ฐฉ์ ํฌ๊ธฐ๊ฐ ํด๋น ์์ดํ ์ ๋ฌด๊ฒ๋ณด๋ค ํฌ๋ฉด ์์ดํ ์ ๋ฃ์์ง ๋ง์ง ์ ํํ๋ค.
๐จ๐จ ์ด์ ๊น์ง์ ๋ฌด๊ฒ์ ๊ฐ์น vs (์ด์ ๊น์ง์ ๋ฌด๊ฒ - ํ์ฌ ์์ดํ ์ ๋ฌด๊ฒ)์ ๊ฐ์น + ํ์ฌ ์์ดํ ์ ๊ฐ์น
๐ป์์ค ์ฝ๋
# ์
๋ ฅ
T = int(input())
Ns = []
for tc in range(T):
N, K = map(int, input().split())
items = [list(map(int, input().split())) for _ in range(N)]
Ns.append((N, K, items))
# ํ์ด
results = []
for tc in range(T):
N, K, items = Ns[tc]
dp = [[0] * (K + 1) for _ in range(N + 1)]
for i in range(1, len(dp)):
v, c = items[i - 1]
for j in range(1, len(dp[i])):
# ๊ฐ๋ฐฉ์ ์์ดํ
์ด ๋ค์ด ๊ฐ ์ ์์ผ๋ฉด
if j >= v:
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - v] + c)
else:
dp[i][j] = dp[i - 1][j]
results.append(dp[-1][-1])
# ์ถ๋ ฅ
for tc in range(T):
print(f'#{tc + 1} {results[tc]}')
๐๋ฌธ์ ํ์ธ
์ถ์ฒ: SW Expert Academy
SW Expert Academy
SW ํ๋ก๊ทธ๋๋ฐ ์ญ๋ ๊ฐํ์ ๋์์ด ๋๋ ๋ค์ํ ํ์ต ์ปจํ ์ธ ๋ฅผ ํ์ธํ์ธ์!
swexpertacademy.com
'Algorithm Problem > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] SWEA - 3307. ์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด (0) | 2020.12.19 |
---|---|
[python] SWEA - 3304. ์ต์ฅ ๊ณตํต ๋ถ๋ถ ์์ด (0) | 2020.12.18 |
[python] SWEA - 3975. ์น๋ฅ ๋น๊ตํ๊ธฐ (0) | 2020.12.16 |
[python] SWEA - 4371. ํญ๊ตฌ์ ๋ค์ด์ค๋ ๋ฐฐ (0) | 2020.12.15 |
[python] SWEA - 4579. ์ธ์์ ๋ชจ๋ ํฐ๋ฆฐ๋๋กฌ 2 (0) | 2020.12.14 |