[BOJ]12865普通リュック
5453 ワード
[問題リンク]
https://www.acmicpc.net/problem/12865
[回答]
これは動的計画法で解決する必要がある問題である.
各重量に担持できる最大価値をdpアレイに格納して解いた.
具体的には、新しい重量/価値が偶発的に添加されると、dpアレイにすでに存在する値を用いて新しい可能な重量を作成することができ、対応する重量値が以前に存在した重量/価値より高い場合、新しい値をdpで格納する方法で作成することができる.
dpはいつも難しい...
[正解コード]
import sys
from collections import deque
input = sys.stdin.readline
n, k = map(int, input().split())
wv_arr = [] #무게/가치 배열
for _ in range(n):
wv_arr.append(list(map(int, input().split())))
dp = [0] * (k + 1)
for w, v in wv_arr:
if w <= k:
temp = deque()
for i in range(1, k - w + 1):
temp.append(max(dp[i + w], dp[i] + v))
dp[w] = max(dp[w], v)
for i in range(k - w):
dp[i + w + 1] = temp.popleft()
print(max(dp))
Reference
この問題について([BOJ]12865普通リュック), 我々は、より多くの情報をここで見つけました https://velog.io/@ththth663/BOJ12865-평범한-배낭テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol