그래서 저는 생각했습니다.변종 배낭 프로그래밍에 대한 동적 프로그래밍 알고리즘
배낭 문제를 변형하고 싶었습니다.
다양한 가중치/값을 가진 항목과 함께 원래의 문제를 상상해보십시오.
내 버전은 일반적인 가중치/값과 함께 "그룹"값을 포함합니다.
예 : 항목 1 [5kg, $ 600 전자] 항목 2 내가 확인하기 위해 배낭 문제를 코드를 얼마나 이제 [1kg, $ 50 음식]
,이 같은 항목의 집합을 가지고, 그 한 항목의 최대에서 각 "그룹"이 선택됩니다.
주 :
- 당신은 해당 그룹에서 항목을 선택할 필요가 없습니다
- 당신은 여전히 무게를 최소화하고 각 그룹에 여러 항목을 극대화하는 가치가있다
- 그룹의 양은 값과 함께 미리 정의됩니다.
저는이 단계에서 코드 초안을 작성하고 있으며 동적 접근 방식을 선택했습니다. 일반적인 배낭 문제에 대한 역동적 인 해결책 뒤에있는 아이디어를 이해합니다.이 솔루션을 변경하여 이러한 "그룹"을 통합하는 방법은 무엇입니까? 내가 지금까지 가지고 그것이이이 문제를 해결마다에있는 그룹에서 해당하는 모든 항목을 제거 할 수 있도록 추가 할 필요가 무엇
KnapSackVariation(v,w,g,n,W)
{
for (w = 0 to W)
V[0,w] = 0;
for(i = 1 to n)
for(w = 0 to W)
if(w[i] <= w)
V[i,w] = max{V[i-1, w], v[i] + V[i-1, w-w[i]]};
else
V[i,w] = V[i-1, w];
return V[n,W];
}
. i 번째 요소
V [I, W, S]의 종류 :
그룹 항목을 주에 추가하십시오! – quasiverse
조합 최적화 문제로 해결하는 것은 어떨까요? 각 항목에 대해 항목을 선택하거나 항목을 선택하지 마십시오. 이를 해결하기 위해 분기 및 바운드 검색을 사용할 수 있습니다. – ysdx