Files
exams/algorithms/labs/lab6/code/1.py
2025-10-01 22:55:09 +03:00

30 lines
762 B
Python

def thief_knapsack(weights, values, M, K):
cap = M * K
n = len(weights)
dp = [0] * (cap + 1)
take = [[False] * (cap + 1) for _ in range(n)]
for i in range(n):
w = weights[i]
v = values[i]
for c in range(cap, w - 1, -1):
if dp[c - w] + v > dp[c]:
dp[c] = dp[c - w] + v
take[i][c] = True
c = cap
items = []
for i in range(n - 1, -1, -1):
if take[i][c]:
items.append(i)
c -= weights[i]
items.reverse()
return dp[cap], items
if __name__ == "__main__":
weights = [2, 3, 4, 5, 9, 7, 3]
values = [3, 4, 5, 8, 10, 7, 6]
M = 2
K = 10
best, items = thief_knapsack(weights, values, M, K)
print(best, items)