๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

๐ŸŸฉ [๋ฐฑ์ค€] [Python] 12865๋ฒˆ_ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ

Dbswnstjd 2022. 11. 9. 23:43

๋ฌธ์ œ

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

ํ’€์ด

# ๋ฐฑ์ค€ 12865๋ฒˆ ๋ฌธ์ œ - ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ
n, k = map(int, input().split())
dp = [[0]*(k+1) for _ in range(n+1)]
weight = []
value = []

for _ in range(n):
    w, v = map(int, input().split())
    weight.append(w)
    value.append(v)

for i in range(1, n+1): # ๋ฌผ๊ฑด idx
    for j in range(1, k+1): # ๊ฐ€๋ฐฉ์˜ ๋ฌด๊ฒŒ
        if j < weight[i-1]: # [์ด์ „๋ฌผ๊ฑด][๊ฐ™์€๋ฌด๊ฒŒ]
            dp[i][j] = dp[i-1][j]
        else: # max(
            # ํ˜„์žฌ ๋ฌผ๊ฑด ๊ฐ€์น˜ + knapsack[์ด์ „ ๋ฌผ๊ฑด][ํ˜„์žฌ ๊ฐ€๋ฐฉ ๋ฌด๊ฒŒ - ํ˜„์žฌ ๋ฌผ๊ฑด ๋ฌด๊ฒŒ],
            # knapsack[์ด์ „ ๋ฌผ๊ฑด][ํ˜„์žฌ ๊ฐ€๋ฐฉ ๋ฌด๊ฒŒ])
            dp[i][j] = max(dp[i-1][j], dp[i-1][j-weight[i-1]] + value[i-1])

print(dp[n][k])

DP