diff --git a/Blatt2/Knapsack.py b/Blatt2/Knapsack.py
index 2ec75b6746fd0649927dfc2d15048fa5797f25e0..8a160defa9ab4dba50bb8dea3974e84478663556 100644
--- a/Blatt2/Knapsack.py
+++ b/Blatt2/Knapsack.py
@@ -1,8 +1,8 @@
 import numpy as np
 
 #config:
-solve_brute_force = True
-solve_dynamic     = False
+solve_brute_force = False
+solve_dynamic     = True
 
 # item:
 #  name weight value
@@ -10,17 +10,64 @@ weight = 1
 value = 2
 
 def dynamic(items: list, capacity: int) -> list:
+    print("Dynamic:")
+    #Array anlegen
     num_items = len(items)
-    array = np.zeros(shape=(num_items+1, capacity), dtype=int)
+    array = np.zeros(shape=(num_items+1, capacity+1), dtype=int)
+    
+    #erstes item
+    for i in range(items[0][weight], capacity+1):
+        array[1][i] = items[0][value]
+    
+    # für  jedes weitere item
     for row, item in enumerate(items, start=1):
-        help_row = np.array[num_items]
-        for j, column in range(item[weight], capacity+1):
-            if item[1] >= j:
-                prev_weight = array[row-1]
-                if prev_weight + item[weight] <= column:
-                    help_row[column] = prev_weight + item[weight]
-                
-                pass #! 
+        #erstes item wurde schon hinzugefügt
+        if row == 1:
+            continue
+        #erstelle eine Hilfszeile
+        help_row = array[row-1].copy()
+        #für jede Spalte
+        for index in range(len(help_row)):
+            #füge den item wert hinzu
+            help_row[index] += item[value]
+        #vergleiche die hilfszeile (verschoben um weight) mit der vorherigen Zeile
+        #und trage den besten wert weiter
+        for column in range(len(help_row)):
+            if column < item[weight]:
+                array[row][column] = array[row-1][column]
+            if column >= item[weight]:
+                array[row][column] = max(help_row[column-item[weight]], array[row-1][column])
+    
+    print(array)
+    
+    #backtracking
+    loaded_items = []
+    row = num_items
+    column = capacity
+    best_value = array[row, column]
+    print("best value", best_value)
+    while(column > 0):
+        while(array[row-1, column] == best_value):
+            row -= 1
+        if (row <= 0):
+            break
+        item = items[row-1]
+        loaded_items.append(item)
+        row -= 1
+        column -= item[weight]
+        best_value -= item[value]
+    
+    
+    #ausgabe
+    loaded_items.reverse()
+    end_weight = 0
+    end_value = 0
+    for item in loaded_items:
+        print(item[0])
+        end_weight += item[weight]
+        end_value += item[value]
+    print('Gewicht: ', end_weight)
+    print('Wert: ', end_value)
 
 
 def traverse(items: list, max_weight: int, bits: list, level: int, depth: int, best_value, best_bits: list) -> list:
@@ -57,7 +104,7 @@ def traverse(items: list, max_weight: int, bits: list, level: int, depth: int, b
     bits[level] = 0
     
     # traversiere rechts
-    #bits[level] = 0
+    #bits[level] = 0 
     traverse(items=items,
                 max_weight=max_weight,
                 bits=bits,
@@ -67,6 +114,7 @@ def traverse(items: list, max_weight: int, bits: list, level: int, depth: int, b
                 best_bits=best_bits)
 
 def brute(items: list, capacity: int) -> list:
+    print("Brute Force:")
     mybits = []
     best_bits = []
     for i in range(len(items)):
@@ -85,12 +133,12 @@ def brute(items: list, capacity: int) -> list:
                 best_bits=best_bits)
     
     print(best_bits)
-    gewicht = 0
+    weight = 0
     for i, item in enumerate(items):
         if best_bits[0][i]:
-            gewicht += item[1]
+            weight += item[1]
             print(item[0])
-    print('Gewicht: ', gewicht)
+    print('Gewicht: ', weight)
     print('Wert: ', best_value[0])
 
 def parse_data_file(path: str) -> list:
@@ -125,5 +173,5 @@ if __name__ == "__main__":
     if solve_dynamic:
         items = get_items("Blatt2/knapsack01.data")
         dynamic(items, 10000)
-        
-    
\ No newline at end of file
+        #items = get_items()
+        #dynamic(items, 500)