задача о ранце/python

Есть такая задача:

Группа студентов из n девушек и m парней собирается в поход. Самостоятельно задать продукты и предметы, а также их вес. Необходимо так распределить предметы и продукты по рюкзакам, чтобы общий вес каждой девушки не превышал 5 кг, а парней – не более 15

Я вроде как реализовала её, но при вводе:

Количество парней: 
5
Количество девушек: 
5
Введите вес каждого предмета: 
5 5 5 5 5 5 5 5 5 5
Количество вещей:  10

происходит ошибка после попытки расчёта для 2-го рюкзака для парня. Может подскажете, как исправить это, или может есть другие алгоритмы для расчёта данной задачи? Код:

import random

print("Количество парней: ")
n = int(input())
print("Количество девушек: ")
m = int(input())
# print("Количество вещей: ")
# k = int(input())
print("Введите вес каждого предмета: ")
X = [int(el) for el in input().split()]
k = len(X)
print("Количество вещей: ", k)
Y = random.sample(range(1, k + 1), k)

W_g = 5
W_b = 15


def knapsack(W, weight, cost, n):
    K = [[0 for x in range(W + 1)] for x in range(n + 1)]
    for i in range(n + 1):
        for w in range(W + 1):
            if i == 0 or w == 0:
                K[i][w] = 0
            elif weight[i - 1] <= w:
                K[i][w] = max(cost[i - 1] + K[i - 1][w - weight[i - 1]], K[i - 1][w])
            else:
                K[i][w] = K[i - 1][w]
    return K


def completion(Y, X, W, K, k):
    kol = 0
    w, i, total_weight = W, n, 0
    res = K[n][W]
    while i > 0 and res > 0:
        if res != K[i - 1][w]:
            print(i, "\b-й предмет, ценой", Y[i - 1], "и веса", X[i - 1])
            total_weight += X[i - 1]
            res -= Y[i - 1]
            w -= X[i - 1]

            kol += 1
            del X[i - 1], Y[i - 1]
        i -= 1
    print("Общий вес предметов:", total_weight, "\b, стоимость:", K[n][W])
    k -= kol
    return X, Y, k


# заполнение рюкзаков девушек
for i in range(m):
    if k > 0:
        print("\n\nОсталось вещей ", k)
        print("Ценность вещей: ", Y)
        print("Вес вещей: ", X)
        K = knapsack(W_g, X, Y, k)
        print(K)
        print("Заполнение рюкзака девушки № \b", i + 1)
        X, Y, k = completion(Y, X, W_g, K, k)
    else:
        print("Все предметы разложены!")
        break

# заполнение рюкзаков мальчиков
for i in range(n):
    if k > 0:
        print("\n\nОсталось вещей ", k)
        print("Ценность вещей: ", Y)
        print("Вес вещей: ", X)
        K = knapsack(W_b, X, Y, k)
        print (K)
        print("Заполнение рюкзака парня № \b", i + 1)
        X, Y, k = completion(Y, X, W_b, K, k)
    else:
        print("Все предметы разложены!")
        break

Ответы (0 шт):