def knapsack(tasks, difficulty_levels):
n = len(tasks)
dp = [[0] * (n + 1) for _ in range(9)] # Tablica przechowująca wyniki
# Obliczanie optymalnego rozwiązania
for i in range(1, n + 1):
task_time = tasks[i - 1]
difficulty = difficulty_levels[i - 1]
for j in range(1, 9):
if difficulty <= j:
dp[j][i] = max(dp[j][i - 1], dp[j - difficulty][i - 1] + task_time)
else:
dp[j][i] = dp[j][i - 1]
# Odtworzenie rozwiązania
selected_tasks = []
j = 8
for i in range(n, 0, -1):
if dp[j][i] != dp[j][i - 1]:
selected_tasks.append(i)
j -= difficulty_levels[i - 1]
return selected_tasks
# Przykładowe dane
tasks = [1, 1, 1, 1, 4]
difficulty_levels = [1, 1, 1, 1, 5]
selected_tasks = knapsack(tasks, difficulty_levels)
total_time = sum(tasks[i - 1] for i in selected_tasks)
# Wyświetlenie wyniku
for task_index in selected_tasks:
print(f"Task{task_index}: Zajął {tasks[task_index - 1]}h")
print(f"\nSUMA: {total_time:.2f}h")