1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
|
public class main {
public static boolean[] algo(int[] volumen, int[] gewicht, int [] wert,int volKapa, int gewKapa){
int optWert=0; //hier wird immer die höchste bisher einzielte Summe gespeichert
int ergebnis = 0;
for(int i = 0; i<Math.pow(2, wert.length); i++){
//Binärdarstellung der Zahl, um zu entscheiden, welche Kisten eingepackt werden
//stattdessen wäre auch Rekursion denkbar (und vor allem bei geringer Kapazität schneller, da bei einem vollen Rucksack abgebrochen werden kann)
int momGewicht = 0;
int momVolumen = 0;
int momWert = 0;
for(int kiste = 0; kiste < wert.length; kiste++){
if (((i >> kiste) & 1) == 1){
momGewicht += gewicht[kiste];
momVolumen += volumen[kiste];
momWert += wert[kiste];
}
}
if(momVolumen <= volKapa && momGewicht <= gewKapa && optWert < momWert){
optWert = momWert;
ergebnis = i;
}
}
boolean[] einpacken = new boolean[wert.length];
for(int kiste = 0; kiste < wert.length; kiste++){
if (((ergebnis >> kiste) & 1) == 1){
einpacken[kiste] = true;
}
}
return einpacken;
}
public static void main(String[] args)
{
int[] volumen = {1,2,3,4,5,6,7,8,9};
int[] gewicht = {3,4,9,7,1,2,6,8,5};
int[] wert = {1,2,3,4,5,6,7,8,9};
boolean[] einpacken = algo(volumen, gewicht, wert, 30,30);
for(boolean i:einpacken)
System.out.println(i);
}
} |