IndexError: список индексов вне диапазона при проблеме с ранцем - PullRequest
0 голосов
/ 21 апреля 2020

Вопрос просит меня указать входной вес, количество предметов, которые я могу сохранить, и массив весов. Он просит меня рассчитать максимальное количество веса, которое я могу нести (0-1 Рюкзак: Dynami c Программирование)

W: Вес ввода
n: Количество предметов
wt: массив массива

Я получаю ошибку индекса для строки 10, когда выполняю этот код. Кажется, это очень глупая ошибка с моей стороны, и я не могу понять ее после нескольких часов выполнения тестовых случаев. Решение, которое я нашел и нашел, похоже, принимает значение t [j] [i] для каждого места, где я пишу t [i] [j]

# Uses python3
import sys

def optimal_weight(W, wt, n):
     t = [[0 for x in range(n+1)] for y in range(W+1)]

     for i in range(1,n+1):
        for j in range(1,W+1):
             if wt[i-1]<=j :
                t[i][j]= max ( wt[i-1] + t[i-1][j-wt[i-1]] , t[i-1][j])
             else :
                t[i][j]= t[i-1][j]

     return t[n][W]

if __name__ == '__main__':
    arr = list(map(int, input().split()))
    W = arr[0]
    n = arr[1]
    wt= list(map(int, input().split()))
    print(optimal_weight(W, wt,n))

1 Ответ

0 голосов
/ 21 апреля 2020
t = [[0 for x in range(n+1)] for y in range(W+1)]

Ваше внешнее измерение списка здесь 0..W, а внутреннее 0..n; т. е. ваш действительный диапазон индекса t[0..W][0..n]. Таким образом, вам потребуется [j][i] вместо [i][j], поскольку ваш i будет n, а ваш j - W.

Кроме того, вы можете изменить способ определения списка:

t = [[0 for x in range(W+1)] for y in range(n+1)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...