문제
풀이
$i$번째 보석의 무게를 $w_i$라 합시다.
첫번째 가방부터 $M$번째 가방까지 순서대로 보석을 담읍시다. 이때 가방은 더 이상 어떤 보석도 담을 수 없는 가방과 더 보석을 담을 수 있는 가방으로 나누어 볼 수 있습니다. 더 보석을 담을 수 있는 가방을 하나 골라 더 담을 수 없을 때 까지 보석을 담고 다음 가방에 보석을 채운다고 생각해 봅시다.
보석을 더 담을 수 있는 가방이 $b$개 남았고, 현재 가방에 $c$만큼의 용량이 남았고, 이때까지 훔친 보석의 집합은 $j$일 때 더 훔칠 수 있는 보석의 최댓값을 $DP[b][c][j]$라 합시다. 아직 훔치지 않은 임의의 보석의 번호 $i$에 대해 아래 점화식이 성립합니다.
\[DP[b][c][j] = \max(DP[b][c - w_i][j\ |\ 2^i] + 1, DP[b-1][C][j])\]답은 $DP[M][C][0]$입니다. 동적 계획법을 사용하면 시간 복잡도 $\mathcal{O}(MC2^N)$에 해결할 수 있습니다.
코드
1 | |