1from functools import lru_cache
2classSolution:3defknapsackProblem(self, items, capacity):4return self.topDown(self, items, capacity,0,0)56@lru_cache(None)7deftopDown(self, items, capacity, i, c):8if i ==len(items):return09if c >= capacity:return010 comb1, comb2 =0,011if c + items[i][0]<= capacity and i +1<=len(items): comb1 = items[i][1]+ self.topDown(items, capacity, i +1, c + items[i][0])12if i +1<=len(items): comb2 = self.topDown(items, capacity, i +1, c)13returnmax(comb1, comb2)