首页 > 解决方案 > 列表索引超出范围,python中的最大战利品问题

问题描述

# Uses python3
import sys

def BestItem(n, v, w):
    maxVW = 0
    bestItem = 0
    for i in range(n):
        if w[i] > 0: 
            if v[i] / w[i] > maxVW:
                maxVW = v[i] / w[i]
                bestItem = i
    return bestItem

def get_optimal_value(n, Wt, v, w):
    amount = [0] * n
    value = 0
    for i in range(n):
        i = BestItem(n, v, w)
        a = min(w[i], Wt)
        value = value + a * v[i] / w[i]
        w[i] = w[i] - a
        amount[i] = amount[i] + a
        Wt = Wt - a
    if Wt == 0 or w == [0] * n:
        return value



if __name__ == "__main__":
    data = list(map(int, sys.stdin.read().split()))
    n, Wt = data[0:2]
    v = data[2:(2 * n + 2):2]
    w = data[3:(2 * n + 2):2]
    opt_value = get_optimal_value(n, Wt, v, w)
    print("{:.10f}".format(opt_value))

我构建了此代码,但不断收到“列表索引超出范围”的错误消息。这是最大战利品问题之一。但我不知道我哪里出错了,因为我没有为任何索引定义任何范围。

标签: python

解决方案


推荐阅读