【问题标题】:IndexError: list index out of range on a Knapsack problemIndexError:背包问题的列表索引超出范围
【发布时间】:2020-08-04 00:53:06
【问题描述】:

问题要求我给出输入权重、我可以保留的项目数和权重数组。它要求我计算我可以携带的最大重量(0-1 背包:动态规划)

W:输入权重
n:项数
wt:权重数组

我在执行此代码时收到第 10 行的索引错误。在我看来,这似乎是一个非常愚蠢的错误,经过数小时的运行测试用例,我无法弄清楚。 我搜索并发现的解决方案似乎是为我写 t[i][j]

的每个地方取值 t[j][i]

# 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))

【问题讨论】:

    标签: python-3.x list dynamic-programming knapsack-problem index-error


    【解决方案1】:
    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)]
    

    【讨论】:

      猜你喜欢
      • 2011-10-31
      • 2015-06-26
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      相关资源
      最近更新 更多