flowchart TD
A[Initialize dp item capacity] --> B[For each item i]
B --> C[For each capacity w]
C --> D{weight i w}
D -- Yes --> E[max include exclude]
D -- No --> F[Keep previous best]
E --> G{more capacities}
F --> G
G -- Yes --> C
G -- No --> H{more items}
H -- Yes --> B
H -- No --> I[Return optimal value]
sequenceDiagram
participant I as item i
participant W as capacity w
participant D as dp table
I->>W: try include exclude
W->>D: query previous row
D-->>W: best previous values
W->>D: write current best
# [0/1 Knapsack 템플릿: 아키텍트 버전]# Use Case: 배낭에 물건 넣기 (각 물건 0개 또는 1개)# Components: 2D DP (items x capacity)# Constraint: 무게 제한 내 최대 가치defknapsack_01(weights,values,capacity):# 1. 초기화 (Initialization Layer)n=len(weights)dp=[[0]*(capacity+1)for_inrange(n+1)]# 2. 2중 루프 (Double Loop)# - i: 물건 인덱스# - w: 현재 용량foriinrange(1,n+1):forwinrange(1,capacity+1):# 3. 선택 로직 (Choice Logic)# - 물건을 넣을 수 있는가?ifweights[i-1]<=w:# 넣는 경우 vs 안 넣는 경우include=values[i-1]+dp[i-1][w-weights[i-1]]exclude=dp[i-1][w]dp[i][w]=max(include,exclude)else:# 넣을 수 없으면 이전 값 유지dp[i][w]=dp[i-1][w]returndp[n][capacity]