Ich habe die folgende Lösung für das Rucksackproblem: (wt [] ist das Gewichtungsfeld, val [] ist das Array Werte, n ist die Größe des Arrays, Index ist das aktuelle Element, das wir sind versuchen (für die Rekursion) und arr ist ein Array, das Wetter oder nicht Element darstellt, i in der Lösung enthalten war.Drucken Sie die Werte der Rucksacklösung
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;
}
}
ich versuche, die Elemente in dieser rekursiven Lösung zu drucken, die gewählt werden, um die Einstellung Indizes von den genommenen in einem Array (Res) zu 1.
Wie ich verstehe, wenn with>without
, bedeutet es, dass ich den aktuellen Artikel oder den Artikel #index wähle.So warum gibt das nicht einen richtigen Wert zurück?
Ich verwende den rekursiven Algorithmus aus einem Grund, ich weiß, dass die Verwendung der Memo-Version hier einfacher sein kann. Beispiel:
Gewichte: 5 6 7 10 11
Werte: 2 4 5 6 9
W = 25
5 Einsen in Array res zurückkehren. Wenn die Lösung 18 ist mit den Elementen 2,3,5 (beginnend mit dem Index 1).
Warum haben Sie eine Prämie hinzugefügt? Ich wollte dafür stimmen, dass das nicht beendet wird, weil [MCVE] (http://stackoverflow.com/help/mcve). – melpomene
Ein Beispiel hinzugefügt. –
Wo ist der Rest des Codes? – melpomene