배낭 문제에 대한 해결책은 다음과 같습니다. (wt []는 가중치 배열, val []은 값 배열, n은 배열 크기, index는 현재 항목입니다. (재귀 위해) 노력하고 편곡 날씨 여부 항목이 내가 용액에 포함 된 나타내는 배열입니다.배낭 값의 프린트
int knapSack(int W, int wt[], int val[], int n, int index, int arr[])
{
if (n == index || W == 0)
return 0;
if (wt[index] > W)
return knapSack(W, wt, val, n, index+1);
int with=val[index]+knapSack(W-wt[index], wt, val, n, index+1);
int without=knapSack(W, wt, val, n, index+1);
if(with>without){
arr[index]=1;
return with;
}
else{
arr[index]=0;
return without;
}
}
내가 인쇄하려고,이 재귀 용액에 설정하여, 선택되는 항목 배열 (res)에서 가져온 인덱스를 1로 설정합니다. 내가 이해하는 것처럼 with>without
이면 현재 항목 또는 #index를 선택하고 있음을 의미하므로 올바른 값을 반환하지 않는 이유는 무엇입니까?
이유에 대해 재귀 알고리즘을 사용하고 있습니다. 메모 작성 버전을 사용하는 것이 더 쉽습니다. 예 :
가중치 : 5 개 6 7 10 11
값 : 2 3 4 5 6 9
W = 25
어레이 입술 5 개 것들을 반환한다. 솔루션이 항목 2,3,5 (색인 1부터 시작)와 함께 18 일 때.
왜 현상금을 추가 했습니까? [MCVE] (http://stackoverflow.com/help/mcve)가 없기 때문에 이것을 닫는 것에 투표하고 싶습니다. – melpomene
예제를 추가했습니다. –
나머지 코드는 어디에 있습니까? – melpomene