假设我们有两个列表,权重和相同长度的值,以及另一个值容量。权重[i]和值[i]表示第i个元素的权重和值。因此,如果我们最多可以采用容量权重,并且可以按比例取值,则占项目权重的一小部分,则必须找到可以得到的最大值(四舍五入为最接近的整数)
因此,如果输入像权重= [6,7,3]值= [110,120,2]容量= 10,那么输出将是178。
为了解决这个问题,我们将遵循以下步骤-
res:= 0
cif容量为0,则
如果pair [0]>容量,则
否则,当pair [0] <=容量时,则
从循环中出来
res:= res +(pair [1] /(pair [0] /容量)的商
容量:= 0
res:= res +对[1]
容量:=容量-对[0]
列出具有权重和值的对P的列表,并根据每个权重的值对它们进行排序
对于P中的每对
返回res的底值
让我们看下面的实现以更好地理解-
class Solution: def solve(self, weights, values, capacity): res = 0 for pair in sorted(zip(weights, values), key=lambda x: - x[1]/x[0]): if not bool(capacity): break if pair[0] > capacity: res += int(pair[1] / (pair[0] / capacity)) capacity = 0 elif pair[0] <= capacity: res += pair[1] capacity -= pair[0] return int(res) ob = Solution()weights = [6, 7, 3] values = [110, 120, 2] capacity = 10 print(ob.solve(weights, values, capacity))
[6, 7, 3],[110, 120, 2],10
输出结果
230