def knapsack(tasks, difficulty_levels):
n = len(tasks)<br />
dp = [[0] * (n + 1) for _ in range(9)] # Tablica przechowująca wyniki<br />
# Obliczanie optymalnego rozwiązania<br />
for i in range(1, n + 1):<br />
task_time = tasks[i - 1]<br />
difficulty = difficulty_levels[i - 1]<br />
for j in range(1, 9):<br />
if difficulty <= j:<br />
dp[j][i] = max(dp[j][i - 1], dp[j - difficulty][i - 1] + task_time)<br />
else:<br />
dp[j][i] = dp[j][i - 1]<br />
# Odtworzenie rozwiązania<br />
selected_tasks = []<br />
j = 8<br />
for i in range(n, 0, -1):<br />
if dp[j][i] != dp[j][i - 1]:<br />
selected_tasks.append(i)<br />
j -= difficulty_levels[i - 1]<br />
return selected_tasks<br />
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")<br />
print(f"\nSUMA: {total_time:.2f}h")