2024-04-01 19:33:42 +02:00
|
|
|
from plecak import *
|
|
|
|
|
2024-04-04 00:33:42 +02:00
|
|
|
l = 10
|
2024-04-01 19:33:42 +02:00
|
|
|
dostepne = [Item() for _ in range(l)]
|
|
|
|
|
|
|
|
for x in dostepne:
|
|
|
|
print(x.waga, x.wartosc)
|
|
|
|
|
2024-04-04 00:33:42 +02:00
|
|
|
cap = 25
|
2024-04-01 19:33:42 +02:00
|
|
|
|
|
|
|
|
|
|
|
def knapsack(dostepne, cap):
|
2024-04-04 00:33:42 +02:00
|
|
|
def rekurencja(i, waga, val, items, alfa):
|
|
|
|
nonlocal max_val, plecak
|
2024-04-01 19:33:42 +02:00
|
|
|
|
2024-04-04 00:33:42 +02:00
|
|
|
if i >= len(dostepne) or waga == cap:
|
2024-04-01 19:33:42 +02:00
|
|
|
if val > max_val:
|
|
|
|
max_val = val
|
2024-04-04 00:33:42 +02:00
|
|
|
plecak = items
|
2024-04-01 19:33:42 +02:00
|
|
|
return
|
|
|
|
|
|
|
|
if val >= alfa:
|
2024-04-04 00:33:42 +02:00
|
|
|
plecak = items
|
2024-04-01 19:33:42 +02:00
|
|
|
return
|
|
|
|
|
2024-04-04 00:33:42 +02:00
|
|
|
rekurencja(i+1, waga, val, items, alfa)
|
2024-04-01 19:33:42 +02:00
|
|
|
|
2024-04-04 00:33:42 +02:00
|
|
|
if waga + dostepne[i].waga <= cap:
|
|
|
|
temp = items[:]
|
|
|
|
temp.append(dostepne[i])
|
|
|
|
rekurencja(i+1, waga + dostepne[i].waga, val + dostepne[i].wartosc, temp, alfa)
|
2024-04-01 19:33:42 +02:00
|
|
|
|
|
|
|
max_val = float("-inf")
|
2024-04-04 00:33:42 +02:00
|
|
|
plecak = []
|
|
|
|
rekurencja(0, 0, 0, [], 60)
|
|
|
|
return max_val, plecak
|
2024-04-01 19:33:42 +02:00
|
|
|
|
|
|
|
|
2024-04-04 00:33:42 +02:00
|
|
|
best, final = knapsack(dostepne, cap)
|
2024-04-01 19:33:42 +02:00
|
|
|
|
|
|
|
|
2024-04-04 00:33:42 +02:00
|
|
|
print("----------\n" + f'wartość plecaka: {best}')
|
|
|
|
for item in final:
|
|
|
|
print(item.waga, item.wartosc)
|