我對揹包問題有以下解決方案:(wt []是權重數組,val []是值數組,n是數組大小,index是當前項目,我們是嘗試(用於遞歸)和改編是表示天氣或不項目i是包含在溶液的陣列。打印揹包解決方案的值
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。那麼爲什麼這不會返回正確的值?
我使用遞歸算法的原因,我知道使用memoization版本可以在這裏更容易。 實施例:
重量:5個6 7 10 11
值:2 4 5 6 9
W = 25
將返回5對那些在陣列水庫當項目2,3,5的解決方案爲18時(從索引1開始)。
爲什麼添加賞金?我想投票支持,因爲沒有[MCVE](http://stackoverflow.com/help/mcve)。 – melpomene
添加了一個示例。 –
代碼的其餘部分在哪裏? – melpomene