배낭 문제는 고유한 무게와 가치를 가진 N개의 물건에 대해 무게를 최소화하면서 가치를 최대화하는 방법을 찾는 문제로, 일반적으로는 DP를 이용해 풀 수 있다. 가방 안에 들어가는 무게를 인덱스로, 해당 무게에서 저장할 수 있는 가장 큰 무게를 값으로 가지는 배열을 선언한다고 하자. 또 무게가 1이고 가치가 0인 가상의 물건을 무한정 사용할 수 있다고 하고, 초기 상태에는 이 물건을 가들 채워넣었다고 하자. 각 무게 w에 비용이 w_k인 k번째 물건을 추가했을 때, 무게 w + w_k에서의 기존 최대 가치를 갱신 가능하다면 가상의 물건을 w_k개만큼 뺀 뒤 k번째 물건을 추가해 가치의 최댓값을 늘릴 수 있다. 이 과정을 최대 무게부터 w_k까지, 각 물건에 대해 차례로 반복한다면 배낭 문제를 해결할 수 있..