File tree Expand file tree Collapse file tree 1 file changed +29
-0
lines changed
Expand file tree Collapse file tree 1 file changed +29
-0
lines changed Original file line number Diff line number Diff line change 1+ """
2+ [BOJ]평범한 배낭_2트/09.14.2025
3+ https://www.acmicpc.net/problem/12865
4+ """
5+
6+ import sys
7+ input = sys .stdin .readline
8+ #1. 입력 변수 - 물품 총 개수 / 제한 무게 / 물건별 무게 w, 가치 v
9+ N , K = map (int ,input ().split ())
10+ items = [[] for _ in range (N + 1 )]
11+ for i in range (1 ,N + 1 ):
12+ items [i ] = list (map (int , input ().split ()))
13+ # print(items)
14+ #2. DP : 0-1 Knapsack 문제
15+ # DP[k][i]: 최대 K kg 제한을 가진 가방안에 0~ i번쨰 item 까지 탐색 후 최대 가치
16+ #(물건 w > 배낭 무게 k) dp[k][i] = dp[k][i-1] #물건i는 못 넣음
17+ #(물건 w <= 배낭 무게 k) dp[k][i] = max(item[v] + dp[k-w][i-1],dp[k][i-1]) # 물건i를 넣거나(배낭 K-item 무게 만큼의 최대값 + 물건 i 넣기) , 안넣거나
18+
19+ dp = [[0 ]* (N + 1 ) for _ in range (K + 1 )]
20+ for k in range (1 ,K + 1 ) :
21+ for i in range (1 , N + 1 ):
22+ if items [i ][0 ] <= k :
23+ dp [k ][i ] = max (dp [k - items [i ][0 ]][i - 1 ] + items [i ][1 ],dp [k ][i - 1 ] )
24+ else :
25+ dp [k ][i ] = dp [k ][i - 1 ]
26+
27+ # print(dp)
28+ #3. dp[-1][-1] = 최종 배낭 K kg에서 최대 가치 출력
29+ print (dp [- 1 ][- 1 ])
You can’t perform that action at this time.
0 commit comments